732 lines
17 KiB
Nix
732 lines
17 KiB
Nix
{
|
|
self,
|
|
pkgs,
|
|
inputs,
|
|
lib,
|
|
config,
|
|
...
|
|
}: {
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
systemd.enable = false;
|
|
xwayland.enable = true;
|
|
settings = {
|
|
"$mod" = "SUPER";
|
|
|
|
exec-once = [
|
|
"hyprctl setcursor 24"
|
|
"clipse -listen"
|
|
];
|
|
|
|
monitor = [
|
|
"eDP-1, 2560x1600@240, 0x0, 1.25"
|
|
];
|
|
|
|
bind = [
|
|
"$mod, Return, exec, kitty"
|
|
"$mod, B, exec, firefox"
|
|
"$mod, Space, exec, rofi -show drun"
|
|
"$mod, C, exec, rofi -show calc"
|
|
"$mod, P, exec, rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu"
|
|
"$mod, X, exec, kitty --class clipse -e 'clipse'"
|
|
", Print, exec, grim -g \"$(slurp)\" - | wl-copy"
|
|
"$mod, Print, exec, grim - | wl-copy"
|
|
"$mod, Z, exec, hyprpicker | wl-copy"
|
|
"$mod, L, exec, hyprlock"
|
|
|
|
"$mod, 1, workspace, 1"
|
|
"$mod, 2, workspace, 2"
|
|
"$mod, 3, workspace, 3"
|
|
"$mod, 4, workspace, 4"
|
|
"$mod, 5, workspace, 5"
|
|
"$mod, 6, workspace, 6"
|
|
"$mod, 7, workspace, 7"
|
|
"$mod, 8, workspace, 8"
|
|
"$mod, 9, workspace, 9"
|
|
|
|
"$mod_SHIFT, 1, movetoworkspacesilent, 1"
|
|
"$mod_SHIFT, 2, movetoworkspacesilent, 2"
|
|
"$mod_SHIFT, 3, movetoworkspacesilent, 3"
|
|
"$mod_SHIFT, 4, movetoworkspacesilent, 4"
|
|
"$mod_SHIFT, 5, movetoworkspacesilent, 5"
|
|
"$mod_SHIFT, 6, movetoworkspacesilent, 6"
|
|
"$mod_SHIFT, 7, movetoworkspacesilent, 7"
|
|
"$mod_SHIFT, 8, movetoworkspacesilent, 8"
|
|
"$mod_SHIFT, 9, movetoworkspacesilent, 9"
|
|
|
|
"$mod_SHIFT, left, movewindow, l"
|
|
"$mod_SHIFT, right, movewindow, r"
|
|
"$mod_SHIFT, up, movewindow, u"
|
|
"$mod_SHIFT, down, movewindow, d"
|
|
|
|
"$mod, left, resizeactive, -20 0"
|
|
"$mod, right, resizeactive, 20 0"
|
|
"$mod, up, resizeactive, 0 -20"
|
|
"$mod, down, resizeactive, 0 20"
|
|
|
|
"$mod_SHIFT, S, setfloating"
|
|
"$mod_SHIFT, T, settiled"
|
|
"$mod_SHIFT, F, fullscreen"
|
|
|
|
"$mod, V, killactive"
|
|
"$mod_ALT, Q, exec, loginctl terminate-user \"\""
|
|
"$mod_ALT, R, exec, hyprctl reload"
|
|
];
|
|
|
|
bindm = [
|
|
"$mod, mouse:272, movewindow"
|
|
];
|
|
|
|
windowrulev2 = [
|
|
"float,class:(clipse)"
|
|
"size 622 652,class:(clipse)"
|
|
|
|
# Fix XWayland Screensharing
|
|
"opacity 0.0 override, class:^(xwaylandvideobridge)$"
|
|
"noanim, class:^(xwaylandvideobridge)$"
|
|
"noinitialfocus, class:^(xwaylandvideobridge)$"
|
|
"maxsize 1 1, class:^(xwaylandvideobridge)$"
|
|
"noblur, class:^(xwaylandvideobridge)$"
|
|
"nofocus, class:^(xwaylandvideobridge)$"
|
|
];
|
|
|
|
general = {
|
|
border_size = 2;
|
|
gaps_out = "0, 8, 8, 8";
|
|
"col.active_border" = "$pink";
|
|
"col.inactive_border" = "$surface2";
|
|
};
|
|
|
|
dwindle = {
|
|
preserve_split = true;
|
|
smart_split = false;
|
|
smart_resizing = false;
|
|
};
|
|
|
|
decoration = {
|
|
rounding = 10;
|
|
shadow = {
|
|
range = 5;
|
|
};
|
|
};
|
|
|
|
gestures = {
|
|
workspace_swipe = true;
|
|
workspace_swipe_create_new = true;
|
|
workspace_swipe_min_speed_to_force = 0;
|
|
};
|
|
|
|
misc = {
|
|
font_family = "SFProDisplay Nerd Font";
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.waybar = {
|
|
enable = true;
|
|
systemd.enable = true;
|
|
package = pkgs.waybar.overrideAttrs (prev: {
|
|
version = "git";
|
|
mesonFlags = prev.mesonFlags ++ (lib.mapAttrsToList lib.mesonEnable {"cava" = false;});
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "Alexays";
|
|
repo = "Waybar";
|
|
rev = "ac08b752e38986f4ddcc13d257aea2fafcedbc92";
|
|
sha256 = "sha256-sbzyQjOag5OC7rSrMW68srjd1k62i9qLmtmFHVu73eA=";
|
|
};
|
|
patches = [];
|
|
});
|
|
settings = {
|
|
mainBar = {
|
|
layer = "top";
|
|
position = "top";
|
|
margin = "8";
|
|
|
|
modules-left = ["custom/nixicon" "hyprland/workspaces" "hyprland/window"];
|
|
modules-center = ["clock"];
|
|
modules-right = ["battery" "custom/separator" "tray"];
|
|
|
|
"custom/nixicon" = {
|
|
format = " ";
|
|
tooltip = false;
|
|
};
|
|
|
|
"custom/separator" = {
|
|
format = " | ";
|
|
tooltip = false;
|
|
};
|
|
|
|
clock = {
|
|
interval = 1;
|
|
locale = "en_US.utf8";
|
|
format = "{:L%r}";
|
|
format-alt = "{:L%r, %A, %B %d %Y}";
|
|
timezone = "America/Los_Angeles";
|
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
|
calendar = {
|
|
mode = "year";
|
|
mode-mon-col = 3;
|
|
weeks-pos = "right";
|
|
format = {
|
|
months = "<span color='#fab387'><b>{}</b></span>";
|
|
days = "<span color='#f5e0dc'><b>{}</b></span>";
|
|
weeks = "<span color='#a6e3a1'><b>W{}</b></span>";
|
|
weekdays = "<span color='#f9e2af'><b>{}</b></span>";
|
|
today = "<span color='#f38ba8'><b><u>{}</u></b></span>";
|
|
};
|
|
};
|
|
};
|
|
|
|
battery = {
|
|
bat = "BAT1";
|
|
interval = 5;
|
|
full-at = 80;
|
|
states = {
|
|
warning = 20;
|
|
critical = 10;
|
|
};
|
|
format = "{icon} {capacity}%";
|
|
tooltip-format = "{timeTo} \n {power} W \n {cycles} Cycles ({health}%)";
|
|
format-icons = {
|
|
discharging = ["" "" "" "" ""];
|
|
charging = ["" "" "" "" ""];
|
|
default = ["" "" "" "" ""];
|
|
};
|
|
format-time = "{H}:{M}";
|
|
};
|
|
|
|
"hyprland/workspaces" = {
|
|
active-only = false;
|
|
all-outputs = true;
|
|
persistent-workspaces = {
|
|
"*" = 9;
|
|
};
|
|
};
|
|
|
|
"hyprland/window" = {
|
|
icon = true;
|
|
max-length = 50;
|
|
};
|
|
|
|
tray = {
|
|
icon-size = 21;
|
|
spacing = 10;
|
|
show-passive-items = true;
|
|
};
|
|
};
|
|
};
|
|
style = ''
|
|
* {
|
|
font-family: "SF ProDisplay Nerd Font";
|
|
border: none;
|
|
border-radius: 0;
|
|
color: @text;
|
|
}
|
|
|
|
window#waybar {
|
|
border-radius: 10px;
|
|
background-color: @base
|
|
}
|
|
|
|
.modules-right {
|
|
background-color: @surface0;
|
|
border-radius: 5px;
|
|
margin: 5px;
|
|
padding: 5px;
|
|
}
|
|
|
|
tooltip {
|
|
background-color: @base;
|
|
border: 1px solid @pink;
|
|
border-radius: 10px;
|
|
}
|
|
|
|
#window {
|
|
margin-left: 10px;
|
|
}
|
|
|
|
#custom-nixicon {
|
|
font-size: 24px;
|
|
color: #7EBAE4;
|
|
}
|
|
|
|
#custom-separator {
|
|
padding-left: 2px;
|
|
padding-right: 2px;
|
|
color: @subtext0;
|
|
}
|
|
|
|
#workspaces {
|
|
margin-top: 5px;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
#workspaces button {
|
|
background-color: @surface0;
|
|
|
|
border-bottom-style: solid;
|
|
border-color: @crust;
|
|
border-width: 3px;
|
|
}
|
|
|
|
#workspaces button.empty {
|
|
border-bottom-style: none;
|
|
}
|
|
|
|
#workspaces button.active {
|
|
border-bottom-style: solid;
|
|
border-color: @overlay2;
|
|
border-width: 3px;
|
|
}
|
|
|
|
#workspaces button.urgent {
|
|
border-bottom-style: solid;
|
|
border-color: @red;
|
|
border-width: 3px;
|
|
}
|
|
|
|
#workspaces button:nth-child(1) {
|
|
border-radius: 5px 0px 0px 5px;
|
|
}
|
|
|
|
#workspaces button:nth-child(9) {
|
|
border-radius: 0px 5px 5px 0px;
|
|
}
|
|
|
|
#clock {
|
|
margin-top: 5px;
|
|
margin-bottom: 5px;
|
|
padding: 5px;
|
|
border-radius: 5px;
|
|
background-color: @surface0;
|
|
}
|
|
|
|
#battery.warning {
|
|
color: @yellow;
|
|
}
|
|
|
|
#battery.critical {
|
|
color: @red;
|
|
}
|
|
'';
|
|
};
|
|
|
|
programs.rofi = {
|
|
enable = true;
|
|
package = pkgs.rofi-wayland;
|
|
font = "SFProDisplay Nerd Font 10";
|
|
location = "center";
|
|
terminal = "${pkgs.kitty}/bin/kitty";
|
|
extraConfig = {
|
|
modi = "run,drun,window,calc";
|
|
show-icons = true;
|
|
drun-display-format = "{icon} {name}";
|
|
location = 0;
|
|
disable-history = false;
|
|
hide-scrollbar = true;
|
|
display-drun = " Apps ";
|
|
display-run = " Run ";
|
|
display-window = " Window";
|
|
display-calc = " Calc";
|
|
sidebar-mode = true;
|
|
};
|
|
theme = let
|
|
inherit (config.lib.formats.rasi) mkLiteral;
|
|
in {
|
|
listview = {
|
|
columns = 1;
|
|
lines = 15;
|
|
};
|
|
|
|
window = {
|
|
border-color = mkLiteral "#f5c2e7";
|
|
border-radius = mkLiteral "10px";
|
|
};
|
|
|
|
"element selected" = {
|
|
background-color = mkLiteral "#313244";
|
|
};
|
|
};
|
|
plugins = with pkgs; [
|
|
rofi-power-menu
|
|
(rofi-calc.override
|
|
{rofi-unwrapped = rofi-wayland-unwrapped;})
|
|
];
|
|
};
|
|
|
|
programs.hyprlock = {
|
|
enable = true;
|
|
settings = {
|
|
"$font" = "SF ProDisplay Nerd Font";
|
|
|
|
general = {
|
|
hide_cursor = true;
|
|
};
|
|
|
|
background = [
|
|
{
|
|
monitor = "";
|
|
path = "color";
|
|
blur_passes = 0;
|
|
color = "$base";
|
|
}
|
|
];
|
|
|
|
label = [
|
|
{
|
|
monitor = "";
|
|
text = "Layout: $LAYOUT";
|
|
color = "$text";
|
|
font_size = 25;
|
|
font_family = "$font";
|
|
position = "30, -30";
|
|
halign = "left";
|
|
valign = "top";
|
|
}
|
|
{
|
|
monitor = "";
|
|
text = "$TIME";
|
|
color = "$text";
|
|
font_size = 90;
|
|
font_family = "$font";
|
|
position = "-30, 0";
|
|
halign = "right";
|
|
valign = "top";
|
|
}
|
|
{
|
|
monitor = "";
|
|
text = "cmd[update:43200000] date +\"%A, %d %B %Y\"";
|
|
color = "$text";
|
|
font_size = 25;
|
|
font_family = "$font";
|
|
position = "-30, -150";
|
|
halign = "right";
|
|
valign = "top";
|
|
}
|
|
];
|
|
|
|
input-field = [
|
|
{
|
|
monitor = "";
|
|
size = "300, 60";
|
|
outline_thickness = 4;
|
|
dots_size = 0.2;
|
|
dots_spacing = 0.2;
|
|
dots_center = true;
|
|
outer_color = "$accent";
|
|
inner_color = "$surface0";
|
|
font_color = "$text";
|
|
fade_on_empty = false;
|
|
placeholder_text = "<span foreground=\"##$textAlpha\"><i> Logged in as </i><span foreground=\"##$accentAlpha\">$USER</span></span>";
|
|
hide_input = false;
|
|
check_color = "$accent";
|
|
fail_color = "$red";
|
|
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
|
|
capslock_color = "$yellow";
|
|
position = "0, -47";
|
|
halign = "center";
|
|
valign = "center";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
services.hypridle = {
|
|
enable = true;
|
|
settings = {
|
|
general = {
|
|
lock_cmd = "pidof hyprlock || hyprlock";
|
|
before_sleep_cmd = "loginctl lock-session";
|
|
after_sleep_cmd = "hyprctl dispatch dpms on";
|
|
};
|
|
|
|
listener = [
|
|
{
|
|
timeout = 150;
|
|
on-timeout = "brightnessctl -s set 10";
|
|
on-resume = "brightnessctl -r";
|
|
}
|
|
{
|
|
timeout = 300;
|
|
on-timeout = "loginctl lock-session";
|
|
}
|
|
{
|
|
timeout = 330;
|
|
on-timeout = "hyprctl dispatch dpms off";
|
|
on-resume = "hyprctl dispatch dpms on";
|
|
}
|
|
{
|
|
timeout = 1800;
|
|
on-timeout = "systemctl suspend";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
services.mako = {
|
|
enable = true;
|
|
actions = true;
|
|
borderRadius = 10;
|
|
defaultTimeout = 5000;
|
|
font = "SFProDisplay Nerd Font 10";
|
|
};
|
|
|
|
services.xsettingsd = {
|
|
enable = true;
|
|
settings = {
|
|
"Gtk/CursorThemeName" = "catppuccin-mocha-pink-cursors";
|
|
"Gtk/CursorThemeSize" = 30;
|
|
"Xft/Hinting" = 0;
|
|
"Xft/HintStyle" = "hintnone";
|
|
"Xft/Antialias" = 1;
|
|
"Xft/RGBA" = "rgb";
|
|
};
|
|
};
|
|
|
|
services.network-manager-applet.enable = true;
|
|
services.pasystray.enable = true;
|
|
|
|
xresources.properties = {
|
|
"Xft.antialias" = 1;
|
|
"Xft.hinting" = 0;
|
|
"Xft.rgba" = "rgb";
|
|
"Xft.hintstyle" = "hintnone";
|
|
};
|
|
|
|
services.flatpak.overrides = {
|
|
global = {
|
|
Context.sockets = ["wayland" "!x11" "!fallback-x11"];
|
|
|
|
Environment = {
|
|
XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons";
|
|
};
|
|
};
|
|
|
|
"com.discordapp.Discord".Context = {
|
|
sockets = ["x11"];
|
|
};
|
|
};
|
|
|
|
home.pointerCursor = {
|
|
gtk.enable = true;
|
|
x11.enable = true;
|
|
hyprcursor = {
|
|
enable = true;
|
|
size = 24;
|
|
};
|
|
size = 24;
|
|
};
|
|
|
|
gtk = {
|
|
enable = true;
|
|
font = {
|
|
package = inputs.apple-fonts.packages.${pkgs.system}.sf-pro-nerd;
|
|
name = "SFProDisplay Nerd Font";
|
|
size = 10;
|
|
};
|
|
};
|
|
|
|
qt = {
|
|
enable = true;
|
|
style.name = "kvantum";
|
|
platformTheme.name = "kvantum";
|
|
};
|
|
|
|
fonts.fontconfig = {
|
|
enable = true;
|
|
|
|
defaultFonts = {
|
|
emoji = ["Noto Color Emoji"];
|
|
monospace = ["SFMono Nerd Font"];
|
|
sansSerif = ["SFProDisplay Nerd Font"];
|
|
serif = ["SFProDisplay Nerd Font"];
|
|
};
|
|
};
|
|
|
|
xdg = {
|
|
enable = true;
|
|
mime.enable = true;
|
|
portal = {
|
|
enable = true;
|
|
xdgOpenUsePortal = true;
|
|
config = {
|
|
common = {
|
|
default = [
|
|
"gtk"
|
|
];
|
|
};
|
|
};
|
|
extraPortals = with pkgs; [
|
|
xdg-desktop-portal-gtk
|
|
];
|
|
};
|
|
userDirs = {
|
|
enable = true;
|
|
createDirectories = true;
|
|
};
|
|
configFile = {
|
|
clipse = {
|
|
enable = true;
|
|
target = "clipse/config.json";
|
|
text = ''
|
|
{
|
|
"historyFile": "clipboard_history.json",
|
|
"maxHistory": 100,
|
|
"allowDuplicates": false,
|
|
"themeFile": "custom_theme.json",
|
|
"tempDir": "tmp_files",
|
|
"logFile": "clipse.log",
|
|
"keyBindings": {
|
|
"choose": "enter",
|
|
"clearSelected": "S",
|
|
"down": "down",
|
|
"end": "end",
|
|
"filter": "/",
|
|
"home": "home",
|
|
"more": "?",
|
|
"nextPage": "right",
|
|
"prevPage": "left",
|
|
"preview": "t",
|
|
"quit": "q",
|
|
"remove": "x",
|
|
"selectDown": "ctrl+down",
|
|
"selectSingle": "s",
|
|
"selectUp": "ctrl+up",
|
|
"togglePin": "p",
|
|
"togglePinned": "tab",
|
|
"up": "up",
|
|
"yankFilter": "ctrl+s"
|
|
},
|
|
"imageDisplay": {
|
|
"type": "kitty",
|
|
"scaleX": 9,
|
|
"scaleY": 9,
|
|
"heightCut": 2
|
|
}
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
catppuccin = {
|
|
gtk = {
|
|
enable = true;
|
|
gnomeShellTheme = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
icon = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
};
|
|
cursors = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
hyprland = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
hyprlock = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
waybar = {
|
|
enable = true;
|
|
flavor = "mocha";
|
|
};
|
|
kvantum = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
mako = {
|
|
enable = true;
|
|
accent = "pink";
|
|
flavor = "mocha";
|
|
};
|
|
rofi = {
|
|
enable = true;
|
|
flavor = "mocha";
|
|
};
|
|
};
|
|
|
|
systemd.user.services = {
|
|
mako = {
|
|
Unit = {
|
|
Description = "mako";
|
|
PartOf = ["graphical-session.target"];
|
|
After = ["graphical-session.target"];
|
|
};
|
|
Service = {
|
|
Type = "dbus";
|
|
BusName = "org.freedesktop.Notifications";
|
|
ExecStart = "${pkgs.mako}/bin/mako";
|
|
ExecReload = "${pkgs.mako}/bin/makoctl reload";
|
|
Restart = "on-failure";
|
|
RestartSec = 1;
|
|
TimeoutStopSec = 10;
|
|
};
|
|
Install = {
|
|
WantedBy = ["graphical-session.target"];
|
|
};
|
|
};
|
|
waybar = {
|
|
Unit = {
|
|
After = lib.mkForce ["graphical-session.target"];
|
|
};
|
|
};
|
|
hypridle = {
|
|
Unit = {
|
|
After = lib.mkForce ["graphical-session.target"];
|
|
};
|
|
};
|
|
xsettingsd = {
|
|
Unit = {
|
|
After = lib.mkForce ["graphical-session.target"];
|
|
};
|
|
};
|
|
network-manager-applet = {
|
|
Unit = {
|
|
After = lib.mkForce ["graphical-session.target"];
|
|
};
|
|
};
|
|
pasystray = {
|
|
Unit = {
|
|
After = lib.mkForce ["graphical-session.target"];
|
|
};
|
|
};
|
|
};
|
|
|
|
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
|
home.packages = with pkgs; [
|
|
# Hyprland
|
|
hyprpicker
|
|
|
|
# Fonts
|
|
inputs.apple-fonts.packages.${pkgs.system}.sf-pro-nerd
|
|
inputs.apple-fonts.packages.${pkgs.system}.sf-pro
|
|
inputs.apple-fonts.packages.${pkgs.system}.sf-mono-nerd
|
|
inputs.apple-fonts.packages.${pkgs.system}.sf-mono
|
|
noto-fonts-color-emoji
|
|
noto-fonts
|
|
self.packages.${pkgs.system}.nerd-fonts-sf-mono-ligatures
|
|
|
|
# Screenshot
|
|
slurp
|
|
grim
|
|
|
|
# Clipboard
|
|
wl-clipboard
|
|
clipse
|
|
|
|
# Utils
|
|
brightnessctl
|
|
xwaylandvideobridge
|
|
];
|
|
}
|