ft: hyprland to home manager, mostly

This commit is contained in:
djaidjai committed 2026-10-02 01:39:23 +02:00
1 parent c7928a52a8
commit 0e3a6b116d
29 files changed
+885 -93

No files matched your search

+4 -2
View File
@@ -4,9 +4,11 @@
HOSTS = nixbook nixpad tuxcomp HOSTS = nixbook nixpad tuxcomp
# build this host's system and make a boot entry
boot: boot:
nixos-rebuild boot --flake . --sudo --ask-sudo-password nixos-rebuild boot --flake . --sudo --ask-sudo-password
# build this host's system and switch in place
switch: switch:
nixos-rebuild switch --flake . --sudo --ask-sudo-password nixos-rebuild switch --flake . --sudo --ask-sudo-password
@@ -15,10 +17,10 @@ build:
nixos-rebuild build --flake . nixos-rebuild build --flake .
# evaluate every host. # evaluate every host.
check: test:
@for host in $(HOSTS); do \ @for host in $(HOSTS); do \
echo "$$host"; \ echo "$$host"; \
nix eval --raw .#nixosConfigurations.$$host.config.system.build.toplevel.drvPath > /dev/null || exit 1; \ nix eval --show-trace --raw .#nixosConfigurations.$$host.config.system.build.toplevel.drvPath > /dev/null || exit 1; \
done done
update: update:
+7
View File
@@ -1,5 +1,8 @@
{ lib, config, pkgs, ... }: { lib, config, pkgs, ... }:
let
hyprLib = import ../../lib/hypr.nix { inherit lib; };
in
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
@@ -13,6 +16,10 @@
boot.initrd.luks.devices."luks-082cc474-c00a-46c5-b140-4b7ccc2e6958".device = boot.initrd.luks.devices."luks-082cc474-c00a-46c5-b140-4b7ccc2e6958".device =
"/dev/disk/by-uuid/082cc474-c00a-46c5-b140-4b7ccc2e6958"; "/dev/disk/by-uuid/082cc474-c00a-46c5-b140-4b7ccc2e6958";
home-manager.users."djai".wayland.windowManager.hyprland.settings.bind = [
(hyprLib.bind "XF86TouchpadToggle" (hyprLib.exec "~/.config/hypr/scripts/toggle_touchpad.sh") "Toggle touchpad using XF86 keys")
];
services.power-profiles-daemon.enable = true; services.power-profiles-daemon.enable = true;
hardware.bluetooth.powerOnBoot = false; hardware.bluetooth.powerOnBoot = false;
+9
View File
@@ -1,5 +1,8 @@
{ lib, config, pkgs, ... }: { lib, config, pkgs, ... }:
let
hyprLib = import ../../lib/hypr.nix { inherit lib; };
in
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
@@ -19,6 +22,12 @@
}; };
hardware.tuxedo-drivers.enable = true; hardware.tuxedo-drivers.enable = true;
# tuxcomp specific binds
home-manager.users."djai".wayland.windowManager.hyprland.settings.bind = [
(hyprLib.bind "SUPER + SHIFT + G" (hyprLib.exec "~/.config/hypr/scripts/gamemode_power.sh") "Toggle gaming power profile mode")
(hyprLib.bind "META + ALT + F6" (hyprLib.exec "~/.config/hypr/scripts/gamemode_power.sh") "Toggle gaming power profile mode")
];
# FIXME: this patch does not work # FIXME: this patch does not work
# adds a `stretch_aspect` scaler (Valve/gamescope#927) and lets `--rt` use the # adds a `stretch_aspect` scaler (Valve/gamescope#927) and lets `--rt` use the
# rtprio limit from modules/gaming.nix instead of CAP_SYS_NICE. # rtprio limit from modules/gaming.nix instead of CAP_SYS_NICE.
+5 -5
View File
@@ -6,19 +6,19 @@
"nvidia" "nvidia"
]; ];
hardware.nvidia.prime = { hardware.nvidia = {
prime = {
offload = { offload = {
enable = true; enable = true;
enableOffloadCmd = true; enableOffloadCmd = true;
}; };
amdgpuBusId = "PCI:0@6:0:0";
amdgpuBusId = "PCI:6@0:0:0"; nvidiaBusId = "PCI:0@1:0:1";
nvidiaBusId = "PCI:1@0:0:0";
}; };
hardware.nvidia = {
open = true; open = true;
modesetting.enable = true; modesetting.enable = true;
nvidiaSettings = true; nvidiaSettings = true;
powerManagement.enable = true;
}; };
} }
+55
View File
@@ -0,0 +1,55 @@
# Helpers for writing Hyprland's Lua config through home-manager, which
# renders each `settings.<name>` entry as an hl.<name>(...) call. Calls with
# several arguments take an `_args` list, and Lua expressions (dispatchers)
# must be wrapped with mkLuaInline or they'd be emitted as strings.
{ lib }:
rec {
lua = lib.generators.mkLuaInline;
# A Lua string literal (JSON's escaping is valid Lua for printable text).
str = builtins.toJSON;
_bind = keys: dispatcher: {
_args = [
keys
(lua dispatcher)
];
};
bindWith = opts: keys: dispatcher: {
_args = [
keys
(lua dispatcher)
opts
];
};
bind = keys: dispatcher: desc: bindWith {description = desc;} keys dispatcher;
bindm = keys: dispatcher: desc: bindWith {description = desc; mouse = true;} keys dispatcher;
exec = cmd: "hl.dsp.exec_cmd(${str cmd})";
mulexec = cmds: "function() ${lib.concatMapStringsSep " " (cmd: "hl.dsp.exec_cmd(${str cmd})") cmds} end";
pass = window: "hl.dsp.pass({ window = ${str window}})";
submap = name: "hl.dsp.submap(${str name})";
sendShortcut = shortcut: window: "hl.dsp.send_shortcut({ mods = '', key = ${str shortcut}, window = ${str window}})";
moveWorkspace = ws: follow: "hl.dsp.window.move({ workspace = ${if builtins.isInt ws then toString ws else str ws}; follow = ${str follow} })";
moveDirection = dir: "hl.dsp.window.move({ direction = ${str dir} })";
focusWorkspace = ws: "hl.dsp.focus({ workspace = ${if builtins.isInt ws then toString ws else str ws} })";
focusDirection = dir: "hl.dsp.focus({ direction = ${str dir} })";
makeSubmap = name: binds:
let
bindContent = builtins.concatStringsSep "\n " (map (bind:
''hl.bind("${builtins.elemAt bind 0}", ${builtins.elemAt bind 1}, { description = "${if builtins.length bind >= 3 then builtins.elemAt bind 2 else ""}" })''
) binds);
in
{
_args = [
name
(lua "function()\n ${bindContent}\nend")
];
};
}
-1
View File
@@ -44,7 +44,6 @@
yudit yudit
]; ];
services.gvfs.enable = true; # CHECK: that this gives us gio back
services.udisks2.enable = true; services.udisks2.enable = true;
services.printing.enable = true; services.printing.enable = true;
+69
View File
@@ -0,0 +1,69 @@
{ hyprLib, mainMod, ... }:
let
inherit (hyprLib)
bind
bindm
exec
focusDirection
focusWorkspace
moveDirection
moveWorkspace
;
in
{
home-manager.users."djai".wayland.windowManager.hyprland.settings.bind = [
# default binds
(bind "${mainMod} + T" (exec "~/.config/WMScripts/kitty_window.sh") "Kitty")
(bind "${mainMod} + SHIFT + T" (exec "~/.config/WMScripts/kitty_window.sh") "Kitty (with sh)")
(bind "${mainMod} + SHIFT + R" (exec "~/.config/WMScripts/record.sh") "Record screen with ffmpg")
(bind "CTRL + SHIFT + SPACE" (exec "~/.config/WMScripts/microphone.sh") "Global mute toggle")
(bind "PRINT" (exec "grimblast copy area --freeze") "Printscreen (frozen)")
(bind "SHIFT + PRINT" (exec "grimblast copy area") "Printscreen")
(bind "${mainMod} + SHIFT + S" (exec "grimblast copy area") "Printscreen")
(bind "CTRL + PRINT" (exec "~/.config/WMScripts/screenshot_float.sh") "Screenshot to feh (flameshot)")
(bind "CTRL + SHIFT + PRINT" (exec "~/.config/hypr/scripts/screenshot_float.sh") "Screenshot to feh (grim)")
(bind "${mainMod} + O" (exec "~/.config/WMScripts/tess.sh") "Screenshot to OCR")
(bind "${mainMod} + P" (exec "hyprpicker -ra") "Colour picker")
(bind "${mainMod} + CTRL + P" (exec "~/.config/WMScripts/changewall.fish") "Manually switch wallpaper")
(bind "${mainMod} + D" (exec "rofi -show drun") "Program runner")
(bind "${mainMod} + SHIFT + D" (exec "~/.config/hypr/scripts/keybinds.sh") "Show keybinds")
(bind "${mainMod} + N" (exec "dunstctl close-all") "Clear dunst notifications")
(bind "${mainMod} + SHIFT + N" (exec "~/.config/WMScripts/dunst.sh") "Toggle dunst notifications")
(bind "CTRL + SHIFT + ESCAPE" (exec "~/.config/WMScripts/murder.sh") "Terminate a program")
(bind "${mainMod} + CTRL + M" (exec "~/.config/WMScripts/mute_active.sh") "Toggle mute active window")
(bind "${mainMod} + CTRL + SHIFT + M" (exec "~/.config/WMScripts/mute_active.sh muted") "Toggle mute active window and apply the 'muted' shader")
(bind "${mainMod} + M" (exec "~/.config/WMScripts/toggle_audiocables.sh combine") "Toggle hyperx audio output")
(bind "${mainMod} + SHIFT + M" (exec "~/.config/WMScripts/toggle_audiocables.sh clementine") "Toggle clementine audio output")
(bind "${mainMod} + Q" (exec "killall deadcells") "Murder Dead cells specifically")
(bind "CTRL + ALT + M" (exec "pactl set-sink-mute 'alsa_output.pci-0000_06_00.6.analog-stereo' toggle") "Toggle internal speaker output")
(bind "${mainMod} + SHIFT + V" (exec "~/.config/hypr/scripts/shader_picker.sh") "Pick a shader")
(bind "${mainMod} + G" (exec "~/.config/hypr/scripts/gamemode_hypr.sh") "Toggle power-saving mode")
] ++ [
# window navigation
(bind "${mainMod} + V" "hl.dsp.window.pin()" "Pin window")
(bind "${mainMod} + SHIFT + C" "hl.dsp.window.center()" "Center floating window")
(bind "${mainMod} + SHIFT + MINUS" (moveWorkspace "special:magic" false) "Move window to special workspace")
(bind "${mainMod} + MINUS" "hl.dsp.workspace.toggle_special('magic')" "Toggle special workspace")
(bind "${mainMod} + SHIFT + Q" "hl.dsp.window.close()" "Kill focused window")
(bind "${mainMod} + SHIFT + SPACE" "hl.dsp.window.float()" "Toggle floating")
(bind "${mainMod} + SPACE" (exec "~/.config/hypr/scripts/toggle_focus_floating.sh") "Toggle floating focus")
(bind "${mainMod} + F" "hl.dsp.window.fullscreen()" "Toggle fullscreen")
(bind "${mainMod} + H" (focusDirection "left") "Focus left")
(bind "${mainMod} + J" (focusDirection "down") "Focus down")
(bind "${mainMod} + K" (focusDirection "up") "Focus up")
(bind "${mainMod} + L" (focusDirection "right") "Focus right")
(bind "${mainMod} + SHIFT + H" (moveDirection "left") "Move window left")
(bind "${mainMod} + SHIFT + J" (moveDirection "down") "Move window down")
(bind "${mainMod} + SHIFT + K" (moveDirection "up") "Move window up")
(bind "${mainMod} + SHIFT + L" (moveDirection "right") "Move window right")
(bind "${mainMod} + CTRL + F" "hl.dsp.window.pseudo()" "Toggle pesudo-floating")
(bind "${mainMod} + E" "hl.dsp.layout('togglesplit')" "Toggle split layout")
(bindm "${mainMod} + mouse:272" "hl.dsp.window.drag()" "Move using mouse")
(bindm "${mainMod} + mouse:273" "hl.dsp.window.resize()" "Resize using mouse")
(bind "${mainMod} + COMMA " (focusWorkspace 999) "")
(bind "${mainMod} + SHIFT + COMMA" (moveWorkspace 999 false) "")
(bind "${mainMod} + SHIFT + code:60" "hl.dsp.workspace.move({ monitor = '+1' })" "Move workspace between monitors")
];
}
+42
View File
@@ -0,0 +1,42 @@
{ ... }:
{
home-manager.users."djai".wayland.windowManager.hyprland.settings.config = {
input = {
kb_layout = "us";
kb_variant = "euro";
kb_options = "caps:escape";
follow_mouse = 1;
mouse_refocus = false;
accel_profile = "flat";
sensitivity = -0.3;
touchpad = {
disable_while_typing = true;
natural_scroll = true;
clickfinger_behavior = false;
tap_to_click = true;
};
tablet = {
output = "HDMI-A-1";
left_handed = true;
region_size = [ 1920 1080 ];
};
};
device = [
{
name = "4152:6180:SteelSeries_SteelSeries_Rival_3";
disable_while_typing = false;
accel_profile = "flat";
sensitivity = -0.3;
}
{
name = "uniw0001:00-093a:0255-touchpad";
enabled = false;
}];
};
}
+60
View File
@@ -0,0 +1,60 @@
{ ... }:
{
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
curve = [
{ _args = [ "specialWorkSwitch" { type = "bezier"; points = [ [ 0.05 0.7 ] [ 0.1 1 ] ]; }];}
{ _args = [ "emphasizedAccel" { type = "bezier"; points = [ [ 0.3 0 ] [ 0.8 0.15 ] ]; }];}
{ _args = [ "emphasizedDecel" { type = "bezier"; points = [ [ 0.05 0.7 ] [ 0.1 1 ] ]; }];}
{ _args = [ "standard" { type = "bezier"; points = [ [ 0.2 0 ] [ 0 1 ] ]; } ];}
{ _args = [ "myBezier" { type = "bezier"; points = [ [ 0.05 0.9 ] [ 0.1 1.05 ] ]; }];}
];
animation = [
{ leaf = "layersIn"; enabled = true; speed = 5; bezier = "emphasizedDecel"; style = "slide";}
{ leaf = "layersOut"; enabled = true; speed = 4; bezier = "emphasizedAccel"; style = "slide";}
{ leaf = "fadeLayers"; enabled = true; speed = 5; bezier = "standard";}
{ leaf = "windowsIn"; enabled = true; speed = 5; bezier = "emphasizedDecel";}
{ leaf = "windowsOut"; enabled = true; speed = 3; bezier = "emphasizedAccel";}
{ leaf = "windowsMove"; enabled = true; speed = 6; bezier = "myBezier";}
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "standard";}
{ leaf = "specialWorkspace"; enabled = true; speed = 4; bezier = "specialWorkSwitch"; style = "slidefadevert 15%";}
{ leaf = "fade"; enabled = true; speed = 6; bezier = "standard";}
{ leaf = "fadeDim"; enabled = true; speed = 6; bezier = "standard";}
{ leaf = "border"; enabled = true; speed = 6; bezier = "standard";}
];
config = {
animations = {
enabled = true;
};
decoration = {
rounding = 10;
active_opacity = 1;
inactive_opacity = 1;
fullscreen_opacity = 1;
dim_inactive = true;
dim_strength = 0.2;
shadow = {
range = 4;
render_power = 3;
color = "rgba(1a1a1aee)";
};
blur = {
enabled = true;
size = 12;
passes = 4;
new_optimizations = true;
xray = true;
};
};
};
};
}
+71
View File
@@ -0,0 +1,71 @@
{ hyprLib, mainMod, ... }:
let
inherit (hyprLib)
bind
pass
sendShortcut
submap
makeSubmap
;
makePassthrough = window: binds:
let
customBinds = map (mapping:
let
k = builtins.elemAt mapping 0;
v = builtins.elemAt mapping 1;
d = if builtins.length mapping >= 3 then builtins.elemAt mapping 2 else "";
in
[k (sendShortcut v window) d]
) binds;
in
customBinds ++ [["ESCAPE" (submap "reset")]];
fehBinds = [
[ "RETURN" "0"]
[ "1" "1"]
[ "2" "2"]
[ "3" "3"]
[ "4" "4"]
[ "W" "5"]
[ "A" "6"]
[ "D" "7"]
[ "F" "8"]
[ "Z" "9"]
[ "Q" "LEFT"]
[ "E" "RIGHT"]
[ "S" "h"]
[ "H" "h"]
];
feishinBinds = [
[ "0" "0" "Send '0' to feishin"]
[ "1" "1" "Send '1' to feishin"]
[ "2" "2" "Send '2' to feishin"]
[ "3" "3" "Send '3' to feishin"]
[ "4" "4" "Send '4' to feishin"]
[ "W" "5" "Send '5' to feishin"]
[ "S" "h" "Send 'h' to feishin"]
[ "H" "h" "Send 'h' to feishin"]
[ "Q" "q" "Send 'q' to feishin"]
[ "E" "e" "Send 'e' to feishin"]
[ "SPACE" "space" "Send 'space' to feishin"]
[ "A" "a" "Send 'a' to feishin"]
[ "D" "d" "Send 'd' to feishin"]
];
in
{
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
bind = [
(bind "${mainMod} + SHIFT + A" (submap "feh") "")
(bind "${mainMod} + SHIFT + F" (submap "feishin") "Enter feishin passthrough mode")
(bind "F7" (pass "class:^(com.obsproject.Studio)$") "Send F7 to obs studio")
(bind "F8" (pass "class:^(com.obsproject.Studio)$") "Send F8 to obs studio")
(bind "F9" (pass "class:^(com.obsproject.Studio)$") "Send F9 to obs studio")
];
define_submap = [
(makeSubmap "feh" (makePassthrough "class:^*hideme)$" fehBinds))
(makeSubmap "feishin" (makePassthrough "class:^(feishin)$" feishinBinds))
];
};
}
+44
View File
@@ -0,0 +1,44 @@
{ hyprLib, mainMod, lib, pkgs, ... }:
let
inherit (hyprLib)
bind
exec
;
# automatically discover shaders in the relative hypr shaders directory
shaders = lib.mapAttrsToList (name: _: lib.strings.removeSuffix ".glsl" "${name}")
(lib.attrsets.filterAttrs
(name: type: type == "regular")
(builtins.readDir ./windowShaders)
);
loadShader = name: "hl.plugin.darkwindow.load_shader('${name}', { path = './windowShaders/${name}.glsl'})";
in
{
users.users.djai.packages = with pkgs.hyprlandPlugins; [
hypr-darkwindow
];
# supposed to map to hl.plugin.darkwindow.load_shader("${shader}" { path = "./windowShaders/${shader}.glsl"})
home-manager.users."djai".wayland.windowManager.hyprland.extraConfig = ''
if hl.plugin.darkwindow ~= nil then
${lib.strings.join "\n " (map loadShader shaders)}
end
'';
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
bind = [
(bind "${mainMod} + SHIFT + B" (exec "~/.config/hypr/scripts/shader_picker_window.sh") "Pick a shader for active window")
];
window_rule = [
{ match.tag = "shader/muted"; "darkwindow:shade" = "grey";}
{ match.tag = "muted"; "darkwindow:shade" = "grey";}
] ++ map (name: { match.tag = "shader/${name}"; "darkwindow:shade" = "${name}";}) shaders;
};
# TODO: symlink ./windowShaders into ~/.config/hypr/
# TODO: symlink ./shaders into ~/.config/hypr/ <- should happen in desktop/hypr.nix prolly
}
+83
View File
@@ -0,0 +1,83 @@
{ lib, ... }:
{
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
layer_rule = [
{ match.namespace = "wallpaper"; animation = "fade"; }
{ match.namespace = "notifs"; blur = false; xray = true; }
{ match.namespace = "waybar"; no_anim = true; ignore_alpha = 0; }
{ match.namespace = "selection"; no_anim = true; ignore_alpha = 1; xray = false; }
{ match.namespace = "hyprpicker"; no_anim = true; }
{ match.namespace = "rofi"; blur = false; animation = "popin"; }
];
window_rule = [
{ match.title = "^slop$"; no_blur = true;}
# scratchyness
{ match.workspace = "special"; float = true;}
{ match.class = "^scratchme$"; workspace = "special:magic";}
# floatyness
{ match.class = "^steam$"; float = true; center = true;}
{ match.class = "^steam$"; match.title = "^Steam$"; float = false;}
{ match.class = "^floatme$"; float = true;}
{ match.title = "^floatme$"; float = true;}
{ match.title = "^Save as.*$"; float = true;}
{ match.title = "^Save image.*$"; center = true;}
{ match.class = "^file-png$"; float = true;}
{ match.class = "^yad$"; float = true;}
# flameshot
{ match.class = "^flameshot$"; float = true;}
{ match.class = "^flameshot$"; move = "exact 1920 1080";}
{ match.class = "^flameshot$"; size = "1920 1080";}
# move bitwarden login window to center
{ match.title = ".*Bitwarden.*"; float = true;}
{ match.title = ".*Bitwarden.*"; size = "monitor_w*0.25 monitor_h*0.15";}
{ match.title = ".*Bitwarden.*"; center = true;}
# gimp floating windows
{ match.class = "^gimp$"; match.title = ".*Colour Exchange.*"; move = "100 (monitor_h/2)-(window_h/2)";}
{ match.class = "^script-fu$"; float = true;}
{ match.class = "^script-fu$"; move = "100 (monitor_h/2)-(window_h/2)";}
# default workspaces
{ match.class = "Librewolf"; workspace = "1 silent";}
{ match.class = "VsCodium"; workspace = "2 silent";}
{ match.class = "feishin"; workspace = "3 silent";}
{ match.class = "signal"; workspace = "4 silent";}
{ match.class = "Element"; workspace = "4 silent";}
{ match.class = "vesktop"; workspace = "4 silent";}
{ match.class = "stoat-desktop"; workspace = "4 silent";}
{ match.class = "freetube"; workspace = "5 silent";}
{ match.class = "com.obsproject.Studio"; workspace = "6 silent";}
{ match.class = "steam"; workspace = "6 silent";}
{ match.class = "org.prismlauncher.PrismLauncher"; workspace = "6 silent";}
{ match.class = "Enigmatica.*"; workspace = "6 silent";}
{ match.class = "gimp"; workspace = "7 silent";}
{ match.class = "krita"; workspace = "7 silent";}
{ match.class = "tuxedo-control-center"; workspace = "10 silent";}
{ match.class = "opencloud"; workspace = "10 silent";}
# shadowdim
{ match.title = ".*shadowDim.*"; workspace = "999 silent";}
# ignore max requests
{ match.class = ".*"; suppress_event = "maximize";}
# muted tag
{ match.tag = "muted"; border_color = { colors = [
(lib.generators.mkLuaInline "colors.subtext0") # FIXME: stupid hack to use catppuccin-nix colors
(lib.generators.mkLuaInline "colors.subtext1")
]; angle = 45;};}
# steam window fixes
{ match.class = "^(steam)$"; suppress_event = "activatefocus";}
];
};
}
+32
View File
@@ -0,0 +1,32 @@
{ hyprLib, mainMod, ... }:
let
inherit (hyprLib)
bind
exec
submap
makeSubmap
;
systemModeName = " l e s h r ^s";
exitScript = "~/.config/WMScripts/exit.sh";
in
{
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
bind = [
(bind "${mainMod} + SHIFT + E" (submap systemModeName) "Enter Shutdown mode")
];
define_submap = [
(makeSubmap systemModeName [
["L" (exec "${exitScript} lock") "Lock the machine"]
["E" (exec "${exitScript} logout") "Log out"]
["S" (exec "${exitScript} suspend") "Suspend the machine"]
["H" (exec "${exitScript} hibernate") "Hibernate the machine"]
["R" (exec "${exitScript} reboot") "Reboot the machine"]
["SHIFT + S" (exec "${exitScript} shutdown") "Power the machine off"]
["ESCAPE" (submap "reset") "Return to default mode"]
])
];
};
}
+43
View File
@@ -0,0 +1,43 @@
{ hyprLib, mainMod, ... }:
let
inherit (hyprLib)
bind
focusWorkspace
moveWorkspace
submap
makeSubmap
;
mod = a: b: a - (b * (builtins.div a b));
in
{
home-manager.users."djai".wayland.windowManager.hyprland.settings = {
bind = [
(bind "${mainMod} + SHIFT + W" (submap "H") "") # hidden workspaces
] ++ builtins.concatLists (builtins.genList (i:
let ws = builtins.toJSON (mod i 11);
in [
(bind "${mainMod} + ${toString i}" (focusWorkspace ws) "Switch to workspace ${toString i}")
(bind "${mainMod} + SHIFT + ${toString i} " (moveWorkspace ws false) "Move window to workspace ${toString i}")
]
) 9);
define_submap = [
(makeSubmap "H" ([
["ESCAPE" (submap "reset")]
] ++ builtins.concatLists (builtins.genList (i:
let ws = i+10;
in [
[(toString i) (focusWorkspace ws) ""]
["SHIFT + ${toString i}" (moveWorkspace ws false)]
]) 9)))];
window_rule = [
{ match.class = ".*hideme.*"; workspace = "11 silent";}
{ match.title = ".*hideme.*"; workspace = "11 silent";}
{ match.class = ".*hideme.*"; no_screen_share = true;}
{ match.title = ".*hideme.*"; no_screen_share = true;}
];
};
}
+21
View File
@@ -0,0 +1,21 @@
{ hyprLib, ... }:
let
inherit (hyprLib)
bind
exec
mulexec
;
in
{
home-manager.users."djai".wayland.windowManager.hyprland.settings.bind = [
(bind "XF86AudioRaiseVolume" (exec "pactl set-sink-volume @DEFAULT_SINK@ +10% ") "Increase volume using XF86 keys")
(bind "XF86AudioLowerVolume" (exec "pactl set-sink-volume @DEFAULT_SINK@ -10% ") "Decrease volume using XF86 keys")
(bind "XF86AudioMute" (exec "pactl set-sink-mute @DEFAULT_SINK@ toggle") "Toggle mute using XF86 keys")
(bind "XF86AudioMicMute" (exec "pactl set-source-mute @DEFAULT_SOURCE@ toggle ") "Toggle microphone mute using XF86 keys")
(bind "XF86MonBrightnessUp" (mulexec ["brightnessctl set +10%" "~/.config/WMScripts/backlight-notif.sh"]) "Increase screen brightness using XF86 keys")
(bind "XF86MonBrightnessDown" (mulexec ["brightnessctl set 10%-" "~/.config/WMScripts/backlight-notif.sh"]) "Decrease screen brightness using XF86 keys")
];
}
+95 -83
View File
@@ -1,6 +1,54 @@
{ ... }: { lib, pkgs, ... }:
#----------------------------------------Autostart----------------------------------------
# hl.on("hyprland.start", function()
# -- plugins
# hl.exec_cmd("hyprpm reload")
#
# -- run kanshi for output placement (also starts up bg and waybar)
# hl.exec_cmd("kanshi")
#
# -- notification manager
# hl.exec_cmd("dunst")
#
# -- start a terminal in the scratchpad
# hl.exec_cmd("kitty --class scratchme -d ~/Documents/diary")
#
# -- run flameshot daemon
# hl.exec_cmd("nohup flameshot")
#
# -- cursor theme
# hl.exec_cmd("hyprctl setcursor Catppuccin-Macchiato-Dark-Cursors 24")
#
# -- opencloud
# hl.exec_cmd("opencloud")
#
# -- openrgb
# hl.exec_cmd("type openrgb &> /dev/null && openrgb --noautoconnect -p aroace.orp > /dev/null")
# end)
#
let
hyprLib = import ../../lib/hypr.nix { inherit lib; };
mainMod = "SUPER";
in
{ {
imports = [
(import ./hypr-bindings.nix { inherit hyprLib mainMod; })
./hypr-input.nix
./hypr-look-and-feel.nix
(import ./hypr-passthrough.nix { inherit hyprLib mainMod; })
(import ./hypr-plugins.nix { inherit hyprLib mainMod lib pkgs; })
./hypr-rules.nix
(import ./hypr-shutdown.nix { inherit hyprLib mainMod; })
(import ./hypr-workspaces.nix { inherit hyprLib mainMod; })
./hypr-xf86.nix
./hyprapps.nix
];
_module.args.hyprLib = hyprLib;
programs.hyprland = { programs.hyprland = {
enable = true; enable = true;
withUWSM = true; withUWSM = true;
@@ -17,92 +65,56 @@
}; };
}; };
# TODO: symlink entire shellscript directory here.
home-manager.users."djai".programs.hyprlock = { home-manager.users."djai".wayland.windowManager.hyprland = {
enable = true; enable = true;
settings = { configType = "lua";
general = {
hide_cursor = true;
ignore_empty_input = true;
};
animations = { plugins = with pkgs; [
enabled = true; hyprlandPlugins.hypr-darkwindow
fade_in = {
duration = 300;
bezier = "easeOutQuint";
};
fade_out = {
duration = 300;
bezier = "easeOutQuint";
};
input_field_dots = {
duration = 100;
bezier = "linear";
};
};
background = {
path = "screenshot";
blur_passes = 3;
};
input-field = {
size = "20%, 5%";
outline_thickness = 3;
inner_color = "rgba(0, 0, 0, 0.0)"; # no fill
outer_color = "rgba($blueAlphaee) rgba($mauveAlphaee) 340deg";
check_color = "rgba($greenAlphaee) rgba($tealAlphaee) 120deg";
fail_color = "rgba($redAlphaee) rgba($peachAlphaee) 20deg";
font_color = "$text";
fade_on_empty = false;
rounding = 15;
font_family = "Monospace";
placeholder_text = "Input password..";
fail_text = "$PAMFAIL";
dots_spacing = 0.3;
position = "0, -20";
halign = "center";
valign = "center";
};
label = {
text = "$ATTEMPTS";
font_size = 24;
position = "0, 40";
halign = "center";
valign = "center";
};
};
};
home-manager.users."djai".services.hyprsunset = {
enable = true;
settings = {
max-gamma = 150;
profile = [
{
time = "7:30";
identity = true;
}
{
time = "20:00";
temperature = 3500;
gamma = 0.9;
}
{
time = "21:00";
temperature = 2500;
gamma = 0.9;
}
]; ];
portalPackage = null;
settings = {
config = {
general = {
gaps_in = 5;
gaps_out = 1;
border_size = 2;
col = {
active_border = { colors = [
(lib.generators.mkLuaInline "colors.blue")
(lib.generators.mkLuaInline "colors.mauve")
]; angle = 45; };
inactive_border = (lib.generators.mkLuaInline "colors.mantle");
};
layout = "dwindle";
};
dwindle = {
preserve_split = true;
special_scale_factor = 0.7;
};
misc = {
enable_anr_dialog = false;
enable_swallow = false;
disable_hyprland_logo = true;
animate_manual_resizes = true;
animate_mouse_windowdragging = false;
mouse_move_focuses_monitor = true;
focus_on_activate = false;
};
ecosystem = {
no_update_news = true;
no_donation_nag = true;
};
};
}; };
}; };
} }
+91
View File
@@ -0,0 +1,91 @@
{ ... }:
{
home-manager.users."djai".programs.hyprlock = {
enable = true;
settings = {
general = {
hide_cursor = true;
ignore_empty_input = true;
};
animations = {
enabled = true;
fade_in = {
duration = 300;
bezier = "easeOutQuint";
};
fade_out = {
duration = 300;
bezier = "easeOutQuint";
};
input_field_dots = {
duration = 100;
bezier = "linear";
};
};
background = {
path = "screenshot";
blur_passes = 3;
};
input-field = {
size = "20%, 5%";
outline_thickness = 3;
inner_color = "rgba(0, 0, 0, 0.0)"; # no fill
outer_color = "rgba($blueAlphaee) rgba($mauveAlphaee) 340deg";
check_color = "rgba($greenAlphaee) rgba($tealAlphaee) 120deg";
fail_color = "rgba($redAlphaee) rgba($peachAlphaee) 20deg";
font_color = "$text";
fade_on_empty = false;
rounding = 15;
font_family = "Monospace";
placeholder_text = "Input password..";
fail_text = "$PAMFAIL";
dots_spacing = 0.3;
position = "0, -20";
halign = "center";
valign = "center";
};
label = {
text = "$ATTEMPTS";
font_size = 24;
position = "0, 40";
halign = "center";
valign = "center";
};
};
};
home-manager.users."djai".services.hyprsunset = {
enable = true;
settings = {
max-gamma = 150;
profile = [
{
time = "7:30";
identity = true;
}
{
time = "20:00";
temperature = 3500;
gamma = 0.9;
}
{
time = "21:00";
temperature = 2500;
gamma = 0.9;
}
];
};
};
}
+48
View File
@@ -0,0 +1,48 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
const vec3 VIB_RGB_BALANCE = vec3(1.0, 1.0, 1.0);
const float VIB_VIBRANCE = 0.40;
const vec3 VIB_coeffVibrance = VIB_RGB_BALANCE * -VIB_VIBRANCE;
void windowShader(inout vec4 color) {
vec2 texCoord = x_TexCoord;
// Distance from the center
float dx = abs(0.5-texCoord.x);
float dy = abs(0.5-texCoord.y);
// Square it to smooth the edges
dx *= dx;
dy *= dy;
texCoord.x -= 0.5;
texCoord.x *= 1.0 + (dy * 0.05);
texCoord.x += 0.5;
texCoord.y -= 0.5;
texCoord.y *= 1.0 + (dx * 0.18);
texCoord.y += 0.5;
// Get texel, and add in scanline if need be
color = x_Texture(texCoord);
color.rgb += sin(texCoord.y * 1250.0) * 0.02;
// Cutoff
if(texCoord.y > 1.0 || texCoord.x < 0.0 || texCoord.x > 1.0 || texCoord.y < 0.0)
color = vec4(0.0);
// vec3 VIB_coefLuma = vec3(0.333333, 0.333334, 0.333333); // was for `if VIB_LUMA == 1`
vec3 VIB_coefLuma = vec3(0.212656, 0.715158, 0.072186); // try both and see which one looks nicer.
float luma = dot(VIB_coefLuma, color.rgb);
float max_color = max(color.r, max(color.g, color.b));
float min_color = min(color.r, min(color.g, color.b));
float color_saturation = max_color - min_color;
vec3 p_col = vec3(vec3(vec3(vec3(sign(VIB_coeffVibrance) * color_saturation) - 1.0) * VIB_coeffVibrance) + 1.0);
color.r = mix(luma, color.r, p_col.r);
color.g = mix(luma, color.g, p_col.g);
color.b = mix(luma, color.b, p_col.b);
}
+7
View File
@@ -0,0 +1,7 @@
// blue light filter shader
void windowShader(inout vec4 color) {
color.r *= 0.7;
color.g *= 0.6;
color.b *= 0.5;
}
+9
View File
@@ -0,0 +1,9 @@
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void windowShader(inout vec4 color) {
// Desaturate to luma only
float luma = dot(vec3(color.r, color.g, color.b), LumaFactors);
color.rgb = vec3(luma, luma, luma);
}
+17
View File
@@ -0,0 +1,17 @@
const float display_framerate = 60.0;
const vec2 display_resolution = vec2(2520.0, 1680.0);
const float gamma = 1.0;
float rand(vec2 uv, float t) {
return fract(sin(dot(uv, vec2(1225.6548, 321.8942))) * 4251.4865 + t);
}
float Sigmoid(float x) { return 1.0 / (1.0 + (exp(-(x - 0.5) * 14.0))); }
void windowShader(inout vec4 color) {
color = vec4(Sigmoid(color.r), Sigmoid(color.g), Sigmoid(color.b), 1.0);
color = pow(color, vec4(gamma));
color.a = 1.0;
}
+9
View File
@@ -0,0 +1,9 @@
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void windowShader(inout vec4 color) {
// Desaturate to luma only
float luma = dot(vec3(color.r, color.g, color.b), LumaFactors);
color.rgb = vec3(luma, luma, luma);
}
+14
View File
@@ -0,0 +1,14 @@
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void windowShader(inout vec4 color) {
// average brightness
float luma = dot(vec3(color.r, color.g, color.b), LumaFactors);
if (color.r < color.g) {
color = vec4(luma, c.g, luma, color.a);
} else {
color = vec4(color.r, luma, luma, color.a);
}
// color = vec4(color.r, color.g, luma, color.a);
}
@@ -0,0 +1,14 @@
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void windowShader(inout vec4 color) {
// average brightness
float luma = dot(vec3(color.r, color.g, color.b), LumaFactors);
if (color.r < color.b) {
color = vec4(luma, luma, color.b, color.a);
} else {
color = vec4(color.r, luma, luma, color.a);
}
// color = vec4(color.r, luma, color.b, color.a);
}
+14
View File
@@ -0,0 +1,14 @@
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void windowShader(inout vec4 color) {
// average brightness
float luma = dot(vec3(color.r, color.g, color.b), LumaFactors);
if (color.g < color.b) {
color = vec4(luma, luma, color.b, color.a);
} else {
color = vec4(luma, color.g, luma, color.a);
}
// color = vec4(luma, color.g, color.b, color.a);
}
@@ -0,0 +1,15 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
const float scaleFactor = 0.7;
float clamp(float x, float min, float max) {
if (x > max) return max;
if (x < min) return min;
return x;
}
void windowShader(inout vec4 color) {
// color += vec4(cos(x_TexCoord.x)/4., sin(x_TexCoord.y)/4., 0., 1.);
color += vec4(cos(v_texcoord.x)/4., cos(v_texcoord.y)/8., sin(v_texcoord.y)/4., 1.);
color = vec4(clamp(color.x, 0., 1.), clamp(color.y, 0., 1.), clamp(color.z, 0., 1.), color.w);
}
@@ -0,0 +1,5 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
void windowShader(inout vec4 color) {
color = vec4(color.z, color.y, color.x, color.a);
}
+1 -1
View File
@@ -15,7 +15,7 @@
"ctrl+shift+n" = "new_os_window_with_cwd"; "ctrl+shift+n" = "new_os_window_with_cwd";
}; };
themeFile = "Catppuccin-Macchiato"; # FIXME: borked in home manager? themeFile = "Catppuccin-Macchiato"; # NOTE: catppuccin-nix is borked for kitty so we do it like this
settings = { settings = {
shell = "${pkgs.fish}/bin/fish"; shell = "${pkgs.fish}/bin/fish";
+1 -1
View File
@@ -20,7 +20,7 @@ in
sops.secrets = { sops.secrets = {
# ssh config (exposes hostnames/ips/ports) # ssh config (exposes hostnames/ips/ports)
"ssh-config" = djaiOnly // { "ssh-config" = djaiOnly // {
sopsFile = ./ssh-config.bin; # TODO: actually use this sopsFile = ./ssh-config.bin;
}; };
# wireguard tunnels # wireguard tunnels
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.