Add Hyprland configuration files and scripts for Wayland setup. Barely functional WIP
This commit is contained in:
parent
90d44e3a1b
commit
db57e24261
13 changed files with 725 additions and 4 deletions
119
home/toph/common/optional/hyprland/binds.nix
Normal file
119
home/toph/common/optional/hyprland/binds.nix
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
#INFO: Reference bind flags: https://wiki.hyprland.org/Configuring/Binds/#bind-flags
|
||||||
|
wayland.windowManager.hyprland.settings =
|
||||||
|
let
|
||||||
|
# -- Functions --
|
||||||
|
defaultApp =
|
||||||
|
type: "${pkgs.gtk3}/bin/gtk-launch $(${pkgs.xdg-utils}/bin/xdg-mime query default ${type})";
|
||||||
|
exec = script: "${pkgs.fish}/bin/fish ${script}";
|
||||||
|
xdg-open = command: "${pkgs.xdg-utils}/bin/xdg-open ${command}";
|
||||||
|
|
||||||
|
# -- Script Launchers --
|
||||||
|
# colorpicker = exec ./scripts/colorpicker.fish;
|
||||||
|
# lockscreen = exec ./scripts/lockscreen.fish;
|
||||||
|
# notify = exec ./scripts/notify.fish;
|
||||||
|
terminal = exec ./scripts/terminal.fish;
|
||||||
|
# wlogout = exec ./scripts/wlogout.fish;
|
||||||
|
|
||||||
|
# -- Commands or Binaries --
|
||||||
|
browser = defaultApp "x-scheme-handler/https";
|
||||||
|
editor = "code";
|
||||||
|
menu = "${pkgs.walker}/bin/walker --modules applications,ssh";
|
||||||
|
files = xdg-open "$HOME";
|
||||||
|
pactl = lib.getExe' pkgs.pulseaudio "pactl";
|
||||||
|
|
||||||
|
#playerctl = lib.getExe pkgs.playerctl; # installed via /home/common/optional/desktops/playerctl.nix
|
||||||
|
#swaylock = "lib.getExe pkgs.swaylock;
|
||||||
|
#makoctl = "${config.services.mako.package}/bin/makoctl";
|
||||||
|
#gtk-play = "${pkgs.libcanberra-gtk3}/bin/canberra-gtk-play";
|
||||||
|
#notify-send = "${pkgs.libnotify}/bin/notify-send";
|
||||||
|
|
||||||
|
# This shits too long
|
||||||
|
lowerVol = "XF86AudioLowerVolume";
|
||||||
|
raiseVol = "XF86AudioRaiseVolume";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
## Mouse Binds ##
|
||||||
|
bindm = [
|
||||||
|
", mouse:275, movewindow"
|
||||||
|
", mouse:276, resizewindow"
|
||||||
|
];
|
||||||
|
|
||||||
|
## Non-consuming Binds ##
|
||||||
|
bindn = [
|
||||||
|
];
|
||||||
|
|
||||||
|
## Repeat Binds ##
|
||||||
|
binde = [
|
||||||
|
# Resize active window 5 pixels in direction
|
||||||
|
"SUPER_ALT, left, resizeactive, -20 0"
|
||||||
|
"SUPER_ALT, right, resizeactive, 20 0"
|
||||||
|
"SUPER_ALT, up, resizeactive, 0 -20"
|
||||||
|
"SUPER_ALT, down, resizeactive, 0 20"
|
||||||
|
|
||||||
|
# -- Volume --
|
||||||
|
", ${raiseVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ +5%"
|
||||||
|
", ${lowerVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ -5%"
|
||||||
|
", ${raiseVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ +5%"
|
||||||
|
", ${lowerVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ -5%"
|
||||||
|
];
|
||||||
|
|
||||||
|
## One-shot Binds ##
|
||||||
|
bind = [
|
||||||
|
# -- Terminal --
|
||||||
|
"SUPER, T, exec, ${terminal}"
|
||||||
|
"SUPER_SHIFT, T, exec, ${terminal}" # floating
|
||||||
|
"SUPER_ALT, T, exec, ${terminal}" # select size?
|
||||||
|
|
||||||
|
# -- Apps --
|
||||||
|
"SUPER, F, exec, ${files}"
|
||||||
|
"SUPER, E, exec, ${editor}"
|
||||||
|
"SUPER, W, exec, ${browser}"
|
||||||
|
"SUPER, N, exec, nm-connection-editor"
|
||||||
|
# "SUPER, P, exec, ${colorpicker}"
|
||||||
|
|
||||||
|
# -- Menu --
|
||||||
|
"SUPER, SUPER_L, exec, ${menu}"
|
||||||
|
# "SUPER, V, exec, ${menu}"
|
||||||
|
|
||||||
|
# -- System --
|
||||||
|
# "SUPER, X, exec, ${wlogout}"
|
||||||
|
# "SUPER, L, exec, ${lockscreen}"
|
||||||
|
"SUPER, L, exec, hyprlock"
|
||||||
|
"SUPER, Q, killactive,"
|
||||||
|
"CTRL_ALT, Delete, exit,"
|
||||||
|
|
||||||
|
# -- Window Management --
|
||||||
|
"SUPER_SHIFT, F, fullscreen, 0"
|
||||||
|
# "SUPER, F, exec, ${notify} 'Fullscreen Mode'"
|
||||||
|
"SUPER, Backspace, togglefloating,"
|
||||||
|
"SUPER, Backspace, centerwindow,"
|
||||||
|
"SUPER, left, movefocus, l"
|
||||||
|
"SUPER, right, movefocus, r"
|
||||||
|
"SUPER, up, movefocus, u"
|
||||||
|
"SUPER, down, movefocus, d"
|
||||||
|
"SUPER_SHIFT, left, movewindow, l"
|
||||||
|
"SUPER_SHIFT, right, movewindow, r"
|
||||||
|
"SUPER_SHIFT, up, movewindow, u"
|
||||||
|
"SUPER_SHIFT, down, movewindow, d"
|
||||||
|
"SUPER_SHIFT, P, pin,"
|
||||||
|
# "SUPER_SHIFT, P, exec, ${notify} 'Toggled Pin'"
|
||||||
|
"SUPER_SHIFT, S, swapnext"
|
||||||
|
# "SUPER_SHIFT, O, toggleopaque"
|
||||||
|
|
||||||
|
# -- Workspaces --
|
||||||
|
", Home, overview:toggle"
|
||||||
|
# "SUPER, A, "
|
||||||
|
# TODO: use hycov for alt tab, https://github.com/bighu630/hycov
|
||||||
|
"ALT, Tab, cyclenext,"
|
||||||
|
"ALT, Tab, bringactivetotop,"
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,240 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = lib.custom.scanPaths ./.;
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
# withUWSM = true; # One day, but not today
|
||||||
|
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
variables = [ "--all" ];
|
||||||
|
extraCommands = lib.mkBefore [
|
||||||
|
"systemctl --user stop graphical-session.target"
|
||||||
|
"systemctl --user start hyprland-session.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
plugins = [
|
||||||
|
# inputs.hycov.packages.${pkgs.system}.hycov
|
||||||
|
(inputs.hyprspace.packages.${pkgs.system}.Hyprspace.overrideAttrs {
|
||||||
|
dontUseCmakeConfigure = true;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
#
|
||||||
|
# ========== Environment Vars ==========
|
||||||
|
#
|
||||||
|
env = [
|
||||||
|
"NIXOS_OZONE_WL, 1" # for ozone-based and electron apps to run on wayland
|
||||||
|
"MOZ_ENABLE_WAYLAND, 1" # for firefox to run on wayland
|
||||||
|
"MOZ_WEBRENDER, 1" # for firefox to run on wayland
|
||||||
|
"XDG_SESSION_TYPE,wayland"
|
||||||
|
"WLR_NO_HARDWARE_CURSORS,1"
|
||||||
|
"WLR_RENDERER_ALLOW_SOFTWARE,1"
|
||||||
|
"QT_QPA_PLATFORM,wayland"
|
||||||
|
"HYPRCURSOR_THEME,rose-pine-hyprcursor" # this will be better than default for now
|
||||||
|
];
|
||||||
|
|
||||||
|
## Monitor ##
|
||||||
|
# parse the monitor spec defined in home/<user>/<host>/default.nix
|
||||||
|
monitor = (
|
||||||
|
map (
|
||||||
|
m:
|
||||||
|
"${m.name},${
|
||||||
|
if m.enabled then
|
||||||
|
"${toString m.width}x${toString m.height}@${toString m.refreshRate},${toString m.x}x${toString m.y},1,transform,${toString m.transform},vrr,${toString m.vrr}"
|
||||||
|
else
|
||||||
|
"disable"
|
||||||
|
}"
|
||||||
|
) (config.monitors)
|
||||||
|
);
|
||||||
|
|
||||||
|
#FIXME(hyprland): adapt this to work with new monitor module
|
||||||
|
#FIXME(hyprland): ws1 still appears on both DP-1 and DP-3 on reboot
|
||||||
|
# workspace = [
|
||||||
|
# "1, monitor:DP-1, default:true, persistent:true"
|
||||||
|
# "2, monitor:DP-1, default:true"
|
||||||
|
# "3, monitor:DP-1, default:true"
|
||||||
|
# "4, monitor:DP-1, default:true"
|
||||||
|
# "5, monitor:DP-1, default:true"
|
||||||
|
# "6, monitor:DP-1, default:true"
|
||||||
|
# "7, monitor:DP-1, default:true"
|
||||||
|
# "8, monitor:DP-2, default:true, persistent:true"
|
||||||
|
# "9, monitor:HDMI-A-1, default:true, persistent:true"
|
||||||
|
# "0, monitor:DP-3, default:true, persistent:true"
|
||||||
|
# ];
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Behavior ==========
|
||||||
|
#
|
||||||
|
binds = {
|
||||||
|
workspace_center_on = 1; # Whether switching workspaces should center the cursor on the workspace (0) or on the last active window for that workspace (1)
|
||||||
|
movefocus_cycles_fullscreen = false; # If enabled, when on a fullscreen window, movefocus will cycle fullscreen, if not, it will move the focus in a direction.
|
||||||
|
};
|
||||||
|
input = {
|
||||||
|
follow_mouse = 2;
|
||||||
|
# follow_mouse options:
|
||||||
|
# 0 - Cursor movement will not change focus.
|
||||||
|
# 1 - Cursor movement will always change focus to the window under the cursor.
|
||||||
|
# 2 - Cursor focus will be detached from keyboard focus. Clicking on a window will move keyboard focus to that window.
|
||||||
|
# 3 - Cursor focus will be completely separate from keyboard focus. Clicking on a window will not change keyboard focus.
|
||||||
|
mouse_refocus = false;
|
||||||
|
kb_options = "fkeys:basic_13-24";
|
||||||
|
};
|
||||||
|
cursor.inactive_timeout = 10;
|
||||||
|
misc = {
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
animate_manual_resizes = true;
|
||||||
|
animate_mouse_windowdragging = true;
|
||||||
|
#disable_autoreload = true;
|
||||||
|
new_window_takes_over_fullscreen = 2; # 0 - behind, 1 - takes over, 2 - unfullscreen/unmaxize
|
||||||
|
middle_click_paste = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Appearance ==========
|
||||||
|
#
|
||||||
|
#FIXME-rice colors conflict with stylix
|
||||||
|
general = {
|
||||||
|
gaps_in = 6;
|
||||||
|
gaps_out = 6;
|
||||||
|
border_size = 0;
|
||||||
|
#col.inactive-border = "0x00000000";
|
||||||
|
#col.active-border = "0x0000000";
|
||||||
|
resize_on_border = true;
|
||||||
|
hover_icon_on_border = true;
|
||||||
|
allow_tearing = true; # used to reduce latency and/or jitter in games
|
||||||
|
};
|
||||||
|
decoration = {
|
||||||
|
active_opacity = 1.0;
|
||||||
|
inactive_opacity = 0.85;
|
||||||
|
fullscreen_opacity = 1.0;
|
||||||
|
rounding = 10;
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 4;
|
||||||
|
passes = 2;
|
||||||
|
new_optimizations = true;
|
||||||
|
popups = true;
|
||||||
|
};
|
||||||
|
shadow = {
|
||||||
|
enabled = true;
|
||||||
|
range = 12;
|
||||||
|
offset = "3 3";
|
||||||
|
#color = "0x88ff9400";
|
||||||
|
#color_inactive = "0x8818141d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# group = {
|
||||||
|
#groupbar = {
|
||||||
|
# };
|
||||||
|
#};
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Auto Launch ==========
|
||||||
|
#
|
||||||
|
# exec-once = ''${startupScript}/path'';
|
||||||
|
# To determine path, run `which foo`
|
||||||
|
exec-once = [
|
||||||
|
''${pkgs.waypaper}/bin/waypaper --restore''
|
||||||
|
];
|
||||||
|
#
|
||||||
|
# ========== Layer Rules ==========
|
||||||
|
#
|
||||||
|
layer = [
|
||||||
|
#"blur, rofi"
|
||||||
|
#"ignorezero, rofi"
|
||||||
|
#"ignorezero, logout_dialog"
|
||||||
|
|
||||||
|
];
|
||||||
|
#
|
||||||
|
# ========== Window Rules ==========
|
||||||
|
#
|
||||||
|
windowrule = [
|
||||||
|
# Dialogs
|
||||||
|
"float, title:^(Open File)(.*)$"
|
||||||
|
"float, title:^(Select a File)(.*)$"
|
||||||
|
"float, title:^(Choose wallpaper)(.*)$"
|
||||||
|
"float, title:^(Open Folder)(.*)$"
|
||||||
|
"float, title:^(Save As)(.*)$"
|
||||||
|
"float, title:^(Library)(.*)$"
|
||||||
|
"float, title:^(Accounts)(.*)$"
|
||||||
|
];
|
||||||
|
windowrulev2 = [
|
||||||
|
"float, class:^(galculator)$"
|
||||||
|
"float, class:^(waypaper)$"
|
||||||
|
"float, class:^(keymapp)$"
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Always opaque ==========
|
||||||
|
#
|
||||||
|
"opaque, class:^([Gg]imp)$"
|
||||||
|
"opaque, class:^([Ff]lameshot)$"
|
||||||
|
"opaque, class:^([Ii]nkscape)$"
|
||||||
|
"opaque, class:^([Bb]lender)$"
|
||||||
|
"opaque, class:^([Oo][Bb][Ss])$"
|
||||||
|
"opaque, class:^([Ss]team)$"
|
||||||
|
"opaque, class:^([Ss]team_app_*)$"
|
||||||
|
"opaque, class:^([Vv]lc)$"
|
||||||
|
|
||||||
|
# Remove transparency from video
|
||||||
|
"opaque, title:^(Netflix)(.*)$"
|
||||||
|
"opaque, title:^(.*YouTube.*)$"
|
||||||
|
"opaque, title:^(Picture-in-Picture)$"
|
||||||
|
#
|
||||||
|
# ========== Scratch rules ==========
|
||||||
|
#
|
||||||
|
#"size 80% 85%, workspace:^(special:special)$"
|
||||||
|
#"center, workspace:^(special:special)$"
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Steam rules ==========
|
||||||
|
#
|
||||||
|
"stayfocused, title:^()$,class:^([Ss]team)$"
|
||||||
|
"minsize 1 1, title:^()$,class:^([Ss]team)$"
|
||||||
|
"immediate, class:^([Ss]team_app_*)$"
|
||||||
|
"workspace 7, class:^([Ss]team_app_*)$"
|
||||||
|
"monitor 0, class:^([Ss]team_app_*)$"
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Fameshot rules ==========
|
||||||
|
#
|
||||||
|
# flameshot currently doesn't have great wayland support so needs some tweaks
|
||||||
|
#"rounding 0, class:^([Ff]lameshot)$"
|
||||||
|
#"noborder, class:^([Ff]lameshot)$"
|
||||||
|
#"float, class:^([Ff]lameshot)$"
|
||||||
|
#"move 0 0, class:^([Ff]lameshot)$"
|
||||||
|
#"suppressevent fullscreen, class:^([Ff]lameshot)$"
|
||||||
|
# "monitor:DP-1, ${flameshot}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# ========== Workspace Assignments ==========
|
||||||
|
#
|
||||||
|
"workspace 8, class:^(virt-manager)$"
|
||||||
|
"workspace 8, class:^(obsidian)$"
|
||||||
|
"workspace 9, class:^(brave-browser)$"
|
||||||
|
"workspace 9, class:^(signal)$"
|
||||||
|
"workspace 9, class:^(org.telegram.desktop)$"
|
||||||
|
"workspace 9, class:^(discord)$"
|
||||||
|
"workspace 0, title:^([Ss]potify*)$"
|
||||||
|
"workspace special, class:^(yubioath-flutter)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
# load at the end of the hyperland set
|
||||||
|
# extraConfig = '''';
|
||||||
|
|
||||||
|
plugin = {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
200
home/toph/common/optional/hyprland/dunst.nix
Normal file
200
home/toph/common/optional/hyprland/dunst.nix
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
#
|
||||||
|
# Dunst
|
||||||
|
# Notification Daemon
|
||||||
|
#
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = builtins.attrValues {
|
||||||
|
inherit (pkgs) libnotify; # required by dunst
|
||||||
|
};
|
||||||
|
|
||||||
|
services.dunst = {
|
||||||
|
enable = true;
|
||||||
|
# waylandDisplay = ""; # set the service's WAYLAND_DISPLAY environment variable
|
||||||
|
# configFile = "";
|
||||||
|
iconTheme = {
|
||||||
|
name = "Adwaita";
|
||||||
|
package = pkgs.adwaita-icon-theme;
|
||||||
|
size = "16x16";
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
global = {
|
||||||
|
# Allow a small subset of html markup:<b></b>, <i></i>, <s></s>, and <u></u>.
|
||||||
|
# For a complete reference see
|
||||||
|
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
|
||||||
|
# If markup is not allowed, those tags will be stripped out of the message.
|
||||||
|
allow_markup = "yes";
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# Markup is allowed
|
||||||
|
format = "%I %s %p\\n%b";
|
||||||
|
|
||||||
|
#TODO dynamic fonts
|
||||||
|
#font = "Droid Sans 12";
|
||||||
|
alignment = "left"; # Options are "left", "center", and "right".
|
||||||
|
|
||||||
|
sort = "yes"; # Sort messages by urgency.
|
||||||
|
indicate_hidden = "yes"; # Show how many messages are currently hidden (because of geometry).
|
||||||
|
|
||||||
|
# The frequency with which text that is longer than the notification
|
||||||
|
# window allows bounces back and forth.
|
||||||
|
# This option conflicts with "word_wrap".
|
||||||
|
# Set to 0 to disable.
|
||||||
|
bounce_freq = 5;
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60;
|
||||||
|
|
||||||
|
# Split notifications into multiple lines if they don't fit into
|
||||||
|
# geometry.
|
||||||
|
word_wrap = "no";
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = "no";
|
||||||
|
|
||||||
|
# The geometry of the window:
|
||||||
|
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||||
|
# The geometry of the message window.
|
||||||
|
# The height is measured in number of notifications everything else
|
||||||
|
# in pixels. If the width is omitted but the height is given
|
||||||
|
# ("-geometry x2"), the message window expands over the whole screen
|
||||||
|
# (dmenu-like). If width is 0, the window expands to the longest
|
||||||
|
# message displayed. A positive x is measured from the left, a
|
||||||
|
# negative from the right side of the screen. Y is measured from
|
||||||
|
# the top and down respectevly.
|
||||||
|
# The width can be negative. In this case the actual width is the
|
||||||
|
# screen width minus the width defined in within the geometry option.
|
||||||
|
geometry = "0x4-25+25";
|
||||||
|
|
||||||
|
# Shrink window if it's smaller than the width. Will be ignored if
|
||||||
|
# width is 0.
|
||||||
|
shrink = "yes";
|
||||||
|
|
||||||
|
# Display notification on focused monitor. Possible modes are:
|
||||||
|
# mouse: follow mouse pointer
|
||||||
|
# keyboard: follow window with keyboard focus
|
||||||
|
# none: don't follow anything
|
||||||
|
#
|
||||||
|
# "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property.
|
||||||
|
# This should be the case for almost all modern windowmanagers.
|
||||||
|
#
|
||||||
|
# If this option is set to mouse or keyboard, the monitor option will be ignored.
|
||||||
|
follow = "mouse";
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = "yes";
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20;
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = "yes";
|
||||||
|
|
||||||
|
# The height of a single line. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
# This adds empty space above and under the text.
|
||||||
|
line_height = 0;
|
||||||
|
|
||||||
|
# Draw a line of "separator_height" pixel height between two
|
||||||
|
# notifications. Set to 0 to disable.
|
||||||
|
separator_height = 1;
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8;
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 10;
|
||||||
|
|
||||||
|
# The transparency of the window. Range: [0; 100].
|
||||||
|
# This option will only work if a compositing windowmanager is
|
||||||
|
# present (e.g. xcompmgr, compiz, etc.).
|
||||||
|
transparency = 15;
|
||||||
|
|
||||||
|
# Define a color for the separator.
|
||||||
|
# possible values are:
|
||||||
|
# * auto: dunst tries to find a color fitting to the background;
|
||||||
|
# * foreground: use the same color as the foreground;
|
||||||
|
# * frame: use the same color as the frame;
|
||||||
|
# * anything else will be interpreted as a X color.
|
||||||
|
# separator_color = "#454947";
|
||||||
|
|
||||||
|
# Print a notification on startup.
|
||||||
|
# This is mainly for error detection, since dbus (re-)starts dunst
|
||||||
|
# automatically after a crash.
|
||||||
|
|
||||||
|
#set to true for debugging
|
||||||
|
startup_notification = false;
|
||||||
|
|
||||||
|
# Align icons left/right/off
|
||||||
|
icon_position = "left";
|
||||||
|
|
||||||
|
width = 300;
|
||||||
|
height = 300;
|
||||||
|
offset = "30x50";
|
||||||
|
#origin = "top-right";
|
||||||
|
origin = "top-center";
|
||||||
|
|
||||||
|
#TODO dynamic theme colours
|
||||||
|
# frame_color = "#dc7f41";
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = "firefox";
|
||||||
|
};
|
||||||
|
|
||||||
|
frame = {
|
||||||
|
width = 2;
|
||||||
|
#TODO dynamic colours
|
||||||
|
# color = "#dc7f41";
|
||||||
|
};
|
||||||
|
|
||||||
|
shortcuts = {
|
||||||
|
# Shortcuts are specified as [modifier+][modifier+]...key
|
||||||
|
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
||||||
|
# "mod3" and "mod4" (windows-key).
|
||||||
|
# Xev might be helpful to find names for keys.
|
||||||
|
|
||||||
|
# Close notification.
|
||||||
|
close = "mod1+space";
|
||||||
|
|
||||||
|
# Close all notifications.
|
||||||
|
close_all = "ctrl+mod1+space";
|
||||||
|
|
||||||
|
# Redisplay last message(s).
|
||||||
|
history = "ctrl+mod4+h";
|
||||||
|
|
||||||
|
# Context menu.
|
||||||
|
context = "ctrl+mod1+c";
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_low = {
|
||||||
|
#TODO dynamic colours
|
||||||
|
# background = "#1e1e20";
|
||||||
|
# foreground = "#c5c8c6";
|
||||||
|
timeout = 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_normal = {
|
||||||
|
#TODO dynamic colours
|
||||||
|
# background = "#1e1e20";
|
||||||
|
# foreground = "#c5c8c6";
|
||||||
|
timeout = 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
urgency_critical = {
|
||||||
|
#TODO dynamic colours
|
||||||
|
# background = "#1e1e20";
|
||||||
|
# foreground = "#c5c8c6";
|
||||||
|
timeout = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
33
home/toph/common/optional/hyprland/gtk.nix
Normal file
33
home/toph/common/optional/hyprland/gtk.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
# x11.enable = true;
|
||||||
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Classic";
|
||||||
|
size = 16;
|
||||||
|
};
|
||||||
|
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
theme = {
|
||||||
|
package = pkgs.flat-remix-gtk;
|
||||||
|
name = "Flat-Remix-GTK-Grey-Darkest";
|
||||||
|
};
|
||||||
|
|
||||||
|
iconTheme = {
|
||||||
|
package = pkgs.adwaita-icon-theme;
|
||||||
|
name = "Adwaita";
|
||||||
|
};
|
||||||
|
|
||||||
|
font = {
|
||||||
|
name = "Sans";
|
||||||
|
size = 14;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
38
home/toph/common/optional/hyprland/hyprlock.nix
Normal file
38
home/toph/common/optional/hyprland/hyprlock.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
programs.hyprlock = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
disable_loading_bar = true;
|
||||||
|
immediate_render = true;
|
||||||
|
hide_cursor = false;
|
||||||
|
no_fade_in = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
background = lib.mkDefault [
|
||||||
|
{
|
||||||
|
path = "screenshot";
|
||||||
|
blur_passes = 3;
|
||||||
|
blur_size = 8;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
input-field = lib.mkDefault [
|
||||||
|
{
|
||||||
|
size = "200, 50";
|
||||||
|
position = "0, -80";
|
||||||
|
monitor = "";
|
||||||
|
dots_center = true;
|
||||||
|
fade_on_empty = false;
|
||||||
|
font_color = "rgb(202, 211, 245)";
|
||||||
|
inner_color = "rgb(91, 96, 120)";
|
||||||
|
outer_color = "rgb(24, 25, 38)";
|
||||||
|
outline_thickness = 5;
|
||||||
|
shadow_passes = 2;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
home/toph/common/optional/hyprland/playerctl.nix
Normal file
7
home/toph/common/optional/hyprland/playerctl.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.playerctl ];
|
||||||
|
services.playerctld = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
1
home/toph/common/optional/hyprland/scripts/default.nix
Normal file
1
home/toph/common/optional/hyprland/scripts/default.nix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ }
|
3
home/toph/common/optional/hyprland/scripts/terminal.fish
Normal file
3
home/toph/common/optional/hyprland/scripts/terminal.fish
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env fish
|
||||||
|
|
||||||
|
foot
|
|
@ -9,9 +9,11 @@
|
||||||
|
|
||||||
## Host-specific Optional Configs ##
|
## Host-specific Optional Configs ##
|
||||||
../common/optional/browsers
|
../common/optional/browsers
|
||||||
../common/optional/gnome
|
# ../common/optional/gnome
|
||||||
# ../common/optional/development
|
../common/optional/hyprland
|
||||||
|
../common/optional/development
|
||||||
# ../common/optional/gaming
|
# ../common/optional/gaming
|
||||||
|
../common/optional/vscode-server.nix
|
||||||
../common/optional/xdg.nix # file associations
|
../common/optional/xdg.nix # file associations
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -20,7 +22,17 @@
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
## Tools ##
|
## Tools ##
|
||||||
inspector
|
inspector
|
||||||
wezterm
|
foot
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
monitors = [
|
||||||
|
{
|
||||||
|
name = "Virtual-1";
|
||||||
|
width = 2560;
|
||||||
|
height = 1440;
|
||||||
|
refreshRate = 60;
|
||||||
|
primary = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
21
hosts/common/optional/hyprland/default.nix
Normal file
21
hosts/common/optional/hyprland/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = lib.custom.scanPaths ./.;
|
||||||
|
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
# withUWSM = true; # One day, but not today
|
||||||
|
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
|
||||||
|
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
inputs.rose-pine-hyprcursor.packages.${pkgs.system}.default
|
||||||
|
];
|
||||||
|
}
|
35
hosts/common/optional/hyprland/greetd.nix
Normal file
35
hosts/common/optional/hyprland/greetd.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#
|
||||||
|
# greeter -> tuigreet https://github.com/apognu/tuigreet?tab=readme-ov-file
|
||||||
|
# display manager -> greetd https://man.sr.ht/~kennylevinsen/greetd/
|
||||||
|
#
|
||||||
|
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
hostSpec = config.hostSpec.username;
|
||||||
|
default = {
|
||||||
|
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --asterisks --time --time-format '%I:%M %p | %a • %h | %F' --cmd Hyprland";
|
||||||
|
user = "toph";
|
||||||
|
};
|
||||||
|
initial = {
|
||||||
|
command = "${pkgs.hyprland}/bin/Hyprland";
|
||||||
|
user = "toph";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# environment.systemPackages = [ pkgs.greetd.tuigreet ];
|
||||||
|
services.greetd = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
restart = true;
|
||||||
|
settings = rec {
|
||||||
|
default_session = default;
|
||||||
|
initial_session = initial;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
11
hosts/common/optional/hyprland/wayland.nix
Normal file
11
hosts/common/optional/hyprland/wayland.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# general packages related to wayland
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
grim # screen capture component, required by flameshot
|
||||||
|
waypaper # wayland packages(nitrogen analog for wayland)
|
||||||
|
swww # backend wallpaper daemon required by waypaper
|
||||||
|
wl-clipboard-rs
|
||||||
|
wlr-randr
|
||||||
|
];
|
||||||
|
}
|
|
@ -28,7 +28,8 @@ in
|
||||||
## Optional Configs ##
|
## Optional Configs ##
|
||||||
"hosts/common/optional/audio.nix" # pipewire and cli controls
|
"hosts/common/optional/audio.nix" # pipewire and cli controls
|
||||||
# "hosts/common/optional/gaming.nix" # steam, gamescope, gamemode, and related hardware
|
# "hosts/common/optional/gaming.nix" # steam, gamescope, gamemode, and related hardware
|
||||||
"hosts/common/optional/gnome.nix" # desktop
|
# "hosts/common/optional/gnome.nix" # desktop
|
||||||
|
"hosts/common/optional/hyprland" # desktop
|
||||||
# "hosts/common/optional/nvtop.nix" # GPU monitor (not available in home-manager)
|
# "hosts/common/optional/nvtop.nix" # GPU monitor (not available in home-manager)
|
||||||
# "hosts/common/optional/plymouth.nix" # fancy boot screen
|
# "hosts/common/optional/plymouth.nix" # fancy boot screen
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue