380 lines
12 KiB
Nix
380 lines
12 KiB
Nix
inputs: {
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.ezpcusr;
|
|
in {
|
|
options.ezpcusr = {
|
|
enable = mkEnableOption "Enable simple PC user config";
|
|
|
|
screenshotsPath = mkOption {
|
|
description = "Path to save screenshots in";
|
|
default = "$HOME/Media/Screenshots";
|
|
type = types.str;
|
|
};
|
|
|
|
screensaver = mkOption {
|
|
description = "ezpcusr screensaver";
|
|
default = {};
|
|
type = types.submodule {
|
|
options = {
|
|
lockTime = mkOption {
|
|
type = types.int;
|
|
default = 600;
|
|
description = "Time until your screen locks";
|
|
};
|
|
offTime = mkOption {
|
|
type = types.int;
|
|
default = 900;
|
|
description = "Time until your screen turns off";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
bluetooth = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "If this PC has bluetooth support";
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
services.hypridle = {
|
|
enable = lib.mkDefault true;
|
|
|
|
settings = {
|
|
general = {
|
|
lock_cmd = "pidof hyprlock || hyprlock";
|
|
before_sleep_cmd = "loginctl lock-session";
|
|
after_sleep_cmd = "hyperctl dispatch dpms on";
|
|
};
|
|
|
|
listener = [
|
|
{
|
|
timeout = cfg.screensaver.lockTime;
|
|
on-timeout = "loginctl lock-session";
|
|
}
|
|
{
|
|
timeout = cfg.screensaver.offTime;
|
|
on-timeout = "hyperctl dispatch dpms off";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
programs.hyprlock = {
|
|
enable = true;
|
|
settings = {
|
|
general = {
|
|
hide_cursor = true;
|
|
};
|
|
|
|
animations = {
|
|
enabled = true;
|
|
fade_in = {
|
|
duration = 300;
|
|
bezier = "easeOutQuint";
|
|
};
|
|
fade_out = {
|
|
duration = 300;
|
|
bezier = "easeOutQuint";
|
|
};
|
|
};
|
|
|
|
background = lib.mkForce [
|
|
{
|
|
path = "screenshot";
|
|
blur_passes = 3;
|
|
blur_size = 8;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
# package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
|
# portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
|
package = pkgs.hyprland;
|
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
|
plugins = with pkgs.hyprlandPlugins; [
|
|
hy3
|
|
hypr-dynamic-cursors
|
|
];
|
|
settings = {
|
|
"plugin:dynamic-cursors" = {
|
|
shake.enabled = false;
|
|
};
|
|
"plugin:hy3" = {
|
|
no_gaps_when_only = 1;
|
|
};
|
|
layerrule = [
|
|
"blur, bar-.*"
|
|
"ignorezero, bar-.*"
|
|
# "blur, notifications-window"
|
|
# "blur, indicator"
|
|
# "ignorezero, indicator"
|
|
];
|
|
ecosystem = {
|
|
no_update_news = true;
|
|
no_donation_nag = true;
|
|
};
|
|
misc = {
|
|
disable_hyprland_logo = true;
|
|
animate_manual_resizes = true;
|
|
animate_mouse_windowdragging = true;
|
|
new_window_takes_over_fullscreen = 2;
|
|
middle_click_paste = false;
|
|
};
|
|
general = {
|
|
"$mod" = "SUPER";
|
|
layout = "hy3";
|
|
|
|
gaps_in = 6;
|
|
gaps_out = 6;
|
|
resize_on_border = true;
|
|
};
|
|
gestures = {
|
|
|
|
};
|
|
bindm = [
|
|
"$mod, mouse:272, movewindow"
|
|
"$mod, mouse:273, resizewindow"
|
|
];
|
|
windowrulev2 = [
|
|
"move 0 0,class:(flameshot),title:(flameshot)"
|
|
"pin,class:(flameshot),title:(flameshot)"
|
|
"fullscreenstate,class:(flameshot),title:(flameshot)"
|
|
"float,class:(flameshot),title:(flameshot)"
|
|
];
|
|
bind =
|
|
[
|
|
"$mod, Return, exec, ${config.programs.foot.package}/bin/foot"
|
|
"$mod, Q, killactive,"
|
|
"$mod, F, fullscreen, 0"
|
|
"$mod SHIFT, F, fullscreen, 1"
|
|
"$mod, Space, togglefloating"
|
|
"$mod SHIFT, SPACE, exec, hyprctl switchxkblayout all next"
|
|
"$mod, D, exec, ${config.programs.rofi.package}/bin/rofi -show drun -show-icons"
|
|
|
|
", Print, exec, ${config.services.flameshot.package}/bin/flameshot gui -p=\"${config.services.flameshot.settings.General.savePath}/$(date '+${config.services.flameshot.settings.General.filenamePattern}')\" --raw | wl-copy -t image/png"
|
|
|
|
"$mod, c, exec, ${config.services.cliphist.package}/bin/cliphist list | rofi -dmenu | cliphist decode | wl-copy"
|
|
|
|
"$mod, minus, exec, pamixer --decrease=5"
|
|
"$mod, equal, exec, pamixer --increase=5 --unmute"
|
|
|
|
", XF86AudioLowerVolume, exec, pamixer --decrease=5"
|
|
", XF86AudioRaiseVolume, exec, pamixer --increase=5 --unmute"
|
|
|
|
", XF86AudioMute, exec, pamixer --toggle-mute"
|
|
", XF86AudioMicMute, exec, pamixer --toggle-mute --default-source"
|
|
|
|
", XF86MonBrightnessDown, exec, light -U 10"
|
|
", XF86MonBrightnessUp, exec, light -A 10"
|
|
"$mod, semicolon, exec, light -U 10"
|
|
"$mod, apostrophe, exec, light -A 10"
|
|
|
|
# Previous/next but change the shuffle/random state before action (and change back afterwards)
|
|
"$mod&SHIFT, bracketright, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
|
|
"$mod&SHIFT, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl previous && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
|
|
"SHIFT, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
|
|
|
|
# Previous/next
|
|
"$mod, bracketright, exec, ${pkgs.playerctl}/bin/playerctl next"
|
|
"$mod, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl previous"
|
|
", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next"
|
|
", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous"
|
|
|
|
# Seek forward/back
|
|
"$mod&Control_L, bracketright, exec, ${pkgs.playerctl}/bin/playerctl position 5+"
|
|
"$mod&Control_L, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl position 5-"
|
|
"Control_L, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl position 5+"
|
|
"Control_L, XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl position 5-"
|
|
|
|
# Toggle play/pause
|
|
", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
|
|
", XF86AudioPause, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
|
|
"$mod, backslash, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
|
|
|
|
# "$mod, p, exec, bash ${inputs.bwmenu}/bwmenu"
|
|
# "$mod, e, exec, bash ${inputs.bemoji}/bemoji -t"
|
|
|
|
"Control_L&Alt_L, l, exec, ${pkgs.systemd}/bin/loginctl lock-session"
|
|
|
|
"$mod, left, hy3:movefocus, l"
|
|
"$mod, right, hy3:movefocus, r"
|
|
"$mod, up, hy3:movefocus, u"
|
|
"$mod, down, hy3:movefocus, d"
|
|
"$mod, h, hy3:movefocus, l"
|
|
"$mod, j, hy3:movefocus, d"
|
|
"$mod, k, hy3:movefocus, u"
|
|
"$mod, l, hy3:movefocus, r"
|
|
|
|
"$mod SHIFT, left, hy3:movewindow, l"
|
|
"$mod SHIFT, right, hy3:movewindow, r"
|
|
"$mod SHIFT, up, hy3:movewindow, u"
|
|
"$mod SHIFT, down, hy3:movewindow, d"
|
|
"$mod SHIFT, h, hy3:movewindow, l"
|
|
"$mod SHIFT, j, hy3:movewindow, d"
|
|
"$mod SHIFT, k, hy3:movewindow, u"
|
|
"$mod SHIFT, l, hy3:movewindow, r"
|
|
|
|
"$mod CTRL, left, resizeactive, -80 0"
|
|
"$mod CTRL, right, resizeactive, 80 0"
|
|
"$mod CTRL, up, resizeactive, 0 -80"
|
|
"$mod CTRL, down, resizeactive, 0 80"
|
|
"$mod CTRL, h, resizeactive, -80 0"
|
|
"$mod CTRL, j, resizeactive, 0 80"
|
|
"$mod CTRL, k, resizeactive, 0 -80"
|
|
"$mod CTRL, l, resizeactive, 80 0"
|
|
|
|
"$mod, mouse_down, workspace, e-1"
|
|
"$mod, mouse_up, workspace, e+1"
|
|
]
|
|
++ (
|
|
# workspaces
|
|
# binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
|
|
builtins.concatLists (builtins.genList (i:
|
|
let ws = i + 1;
|
|
in [
|
|
"$mod, code:1${toString i}, workspace, ${toString ws}"
|
|
"$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
|
|
]
|
|
)
|
|
9)
|
|
);
|
|
};
|
|
};
|
|
|
|
programs.hyprpanel = {
|
|
enable = true;
|
|
settings = {
|
|
bar.layouts = {
|
|
"*" = {
|
|
left = [
|
|
"dashboard"
|
|
"workspaces"
|
|
"windowtitle"
|
|
];
|
|
middle = [ "media" ];
|
|
right = [
|
|
"systray"
|
|
"bluetooth"
|
|
"network"
|
|
"battery"
|
|
"volume"
|
|
"clock"
|
|
"notifications"
|
|
];
|
|
};
|
|
};
|
|
|
|
bar = {
|
|
launcher.autoDetectIcon = true;
|
|
workspaces.show_numbered = true;
|
|
};
|
|
|
|
menus.clock = {
|
|
time = {
|
|
military = false;
|
|
hideSeconds = false;
|
|
};
|
|
# weather.unit = "metric";
|
|
};
|
|
|
|
menus.dashboard = {
|
|
directories.enabled = false;
|
|
shortcuts.enabled = false;
|
|
stats.enable_gpu = false;
|
|
};
|
|
|
|
theme = {
|
|
font.weight = 100;
|
|
# osd.opacity = 60;
|
|
# notification.opacity = 60;
|
|
bar = {
|
|
transparent = true;
|
|
outer_spacing = "0";
|
|
buttons = {
|
|
background_opacity = 60;
|
|
padding_x = "0.4rem";
|
|
padding_y = "0.1rem";
|
|
y_margins = "0.2em";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.librewolf.enable = true;
|
|
|
|
services.blueman-applet.enable = lib.mkDefault cfg.bluetooth;
|
|
|
|
services.mpris-proxy.enable = lib.mkDefault true;
|
|
|
|
services.playerctld.enable = lib.mkDefault true;
|
|
|
|
programs.foot.enable = true;
|
|
|
|
xdg.enable = true;
|
|
xdg.userDirs.enable = true;
|
|
|
|
xdg.configFile."mimeapps.list".force = true;
|
|
xdg.mimeApps = let
|
|
applications = {
|
|
"inode/directory" = "pcmanfm-qt.desktop";
|
|
|
|
"text/html" = "librewolf.desktop";
|
|
"x-scheme-handler/http" = "librewolf.desktop";
|
|
"x-scheme-handler/https" = "librewolf.desktop";
|
|
"x-scheme-handler/about" = "librewolf.desktop";
|
|
|
|
"application/zip" = "ark.desktop";
|
|
"application/rar" = "ark.desktop";
|
|
"application/7z" = "ark.desktop";
|
|
"application/*tar" = "ark.desktop";
|
|
};
|
|
in {
|
|
enable = true;
|
|
associations.added = applications;
|
|
defaultApplications = applications;
|
|
};
|
|
|
|
programs.mpv.enable = lib.mkDefault true;
|
|
|
|
fonts.fontconfig.enable = lib.mkDefault true;
|
|
|
|
home.packages = with pkgs; [
|
|
wl-clipboard
|
|
wtype
|
|
ydotool
|
|
keyutils
|
|
maim
|
|
slop
|
|
xorg.xhost
|
|
pamixer
|
|
];
|
|
|
|
programs.rofi = {
|
|
enable = lib.mkDefault true;
|
|
terminal = lib.mkDefault "${config.programs.foot.package}/bin/foot";
|
|
};
|
|
|
|
services.flameshot = {
|
|
enable = true;
|
|
settings.General = {
|
|
filenamePattern = "%F_%T";
|
|
savePath = "${config.home.homeDirectory}/Media/Screenshots";
|
|
saveAfterCopy = true;
|
|
useGrimAdapter = true;
|
|
};
|
|
};
|
|
|
|
services.cliphist.enable = true;
|
|
};
|
|
}
|