Compare commits

..

No commits in common. "ff647de9ce8154ff8217043cd024db5675ac1e8c" and "3a08d19841c5ec2febeba9fb51b8e8b8d5ab602d" have entirely different histories.

15 changed files with 101 additions and 248 deletions

View file

@ -23,6 +23,5 @@ each host should have these files:
- better theming for hyprlock, rofi, dunst (accent for hyprlock & dunst, variants for rofi) - better theming for hyprlock, rofi, dunst (accent for hyprlock & dunst, variants for rofi)
- some way for border radius, border, tranparency theme options - some way for border radius, border, tranparency theme options
- tags for pip and popups in hyprland config - tags for pip and popups in hyprland config
- make wl-clip-persist, polkit agent, and networkmanager applet systemd services? - remove exec-once stuff and use systemd services instead
- uh oh! it seems clipse is broken. the listen-shell service stops after you open the gui
- gtk cursors are MESSED UP. top priority rn - gtk cursors are MESSED UP. top priority rn

View file

@ -17,11 +17,11 @@
# debug # debug
strace ltrace lsof strace ltrace lsof
# apps # apps
firefox qalculate-gtk krita inkscape onlyoffice-desktopeditors vlc nicotine-plus transmission_4-gtk font-manager obs-studio kdePackages.kdenlive firefox qalculate-gtk krita inkscape onlyoffice-desktopeditors vlc nicotine-plus transmission_4-gtk font-manager
# compatibility # compatibility
wineWowPackages.waylandFull winetricks wineWowPackages.waylandFull winetricks
# misc # misc
bat file which packwiz yt-dlp hyfetch bat file which packwiz yt-dlp wl-screenrec wl-clipboard grim hyfetch
# games # games
prismlauncher prismlauncher
] ++ (with pkgs.my; [ ] ++ (with pkgs.my; [

View file

@ -6,18 +6,18 @@ let
in { in {
options.modules.desktop.batsignal = { options.modules.desktop.batsignal = {
enable = mkEnableOption "Enable batsignal, a battery notification service"; enable = mkEnableOption "Enable batsignal, a battery notification service";
package = mkOption {
type = types.package;
default = pkgs.batsignal;
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.services.batsignal = { modules.desktop.execOnStart = [
enable = true; # -w 20 -c 10 -d 5 -- set battery levels
# -p -- notify on plug/unplug
extraArgs = [ # -m 2 -- set interval to 2 seconds
# -w 20 -c 10 -d 5 -- set battery levels "${lib.getExe cfg.package} -w 20 -c 10 -d 5 -p -m 2"
# -p -- notify on plug/unplug ];
# -m 2 -- set interval to 2 seconds
"-w 20" "-c 10" "-d 5" "-p" "-m 2"
];
};
}; };
} }

View file

@ -9,28 +9,28 @@ in {
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.clipse; default = pkgs.clipse;
example = "pkgs.clipse";
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.systemd.user.services.clipse = { # runtime dependencies
Unit = { user.packages = with pkgs; [ wl-clipboard ];
Description = "clipse, a generic clipboard manager";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = { modules.desktop.execOnStart = [ "${lib.getExe cfg.package} -listen-shell" ];
WantedBy = [ "graphical-session.target" ]; hm.wayland.windowManager.hyprland.settings = let
}; class = "clipse";
in {
windowrulev2 = [
"float, class:^${class}$"
"size 622 652, class:^${class}$"
"center, class:^${class}$"
"stayfocused, class:^${class}$"
"dimaround, class:^${class}$"
];
Service = { bind = [
Type = "simple"; "$mod, V, exec, ${lib.getExe pkgs.wezterm} start --class ${class} -e '${lib.getExe cfg.package}'"
ExecStart = "${lib.getExe cfg.package} -listen-shell"; ];
Restart = "on-failure";
RestartSec = 5;
};
}; };
}; };
} }

View file

@ -9,6 +9,11 @@ in {
type = types.nullOr (types.enum ["x11" "wayland"]); type = types.nullOr (types.enum ["x11" "wayland"]);
description = "What display protocol to use"; description = "What display protocol to use";
}; };
execOnStart = mkOption {
type = types.listOf types.str;
description = "List of commands to run on startup";
default = null;
};
}; };
config = mkMerge [ config = mkMerge [
@ -52,18 +57,9 @@ in {
SDL_VIDEODRIVER = "wayland"; SDL_VIDEODRIVER = "wayland";
CLUTTER_BACKEND = "wayland"; CLUTTER_BACKEND = "wayland";
}; };
hm.home.packages = with pkgs; [
wl-clipboard
wl-clipboard-x11 # compat with xclip
];
}) })
(mkIf (cfg.envProto == "x11") { (mkIf (cfg.envProto == "x11") {
services.xserver.excludePackages = [ pkgs.xterm ]; services.xserver.excludePackages = [ pkgs.xterm ];
hm.home.packages = with pkgs; [
xclip
];
}) })
]; ];
} }

View file

@ -11,7 +11,6 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.services.dunst = { hm.services.dunst = {
enable = true; enable = true;
settings = with config.colorScheme.palette; { settings = with config.colorScheme.palette; {
global = { global = {
follow = "mouse"; follow = "mouse";

View file

@ -9,10 +9,9 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
modules.desktop.execOnStart = [ "${pkgs.gammastep}/bin/gammastep-indicator" ];
hm.services.gammastep = { hm.services.gammastep = {
enable = true; enable = true;
tray = true;
# portland, oregon # portland, oregon
latitude = 45.3112; latitude = 45.3112;
longitude = -122.4055; longitude = -122.4055;

View file

@ -88,10 +88,10 @@ in {
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
])); ]));
bindr = [ # "bind released" bindr = [ # "bind released"
"SUPER, Super_L, exec, ${lib.getExe config.modules.desktop.nwg-drawer.package}" "SUPER, Super_L, exec, ${lib.getExe pkgs.nwg-drawer}"
]; ];
bind = let bind = let
screenshotScript = pkgs.writeShellScript "screenshot" '' screenshotScript = pkgs.writeScript "screenshot" ''
temp_file=$(mktemp) temp_file=$(mktemp)
trap 'rm -f "$temp_file"' EXIT trap 'rm -f "$temp_file"' EXIT
@ -149,10 +149,9 @@ in {
"$mod, bracketleft, workspace, e-1" "$mod, bracketleft, workspace, e-1"
"$mod, bracketright, workspace, e+1" "$mod, bracketright, workspace, e+1"
"$mod, R, exec, ${lib.getExe config.modules.desktop.rofi.package} -show run" "$mod, R, exec, ${lib.getExe pkgs.rofi-wayland} -show run"
"$mod, T, exec, ${lib.getExe config.modules.software.system.wezterm.package}" "$mod, T, exec, ${lib.getExe pkgs.wezterm}"
"$mod, L, exec, ${lib.getExe config.modules.desktop.hyprlock.package}" "$mod, L, exec, ${lib.getExe config.modules.desktop.hyprlock.package}"
"$mod, V, exec, ${lib.getExe config.modules.software.system.wezterm.package} start --class 'clipse' -e '${lib.getExe config.modules.desktop.clipse.package}'"
# screenshot # screenshot
# area # area
@ -165,6 +164,10 @@ in {
", XF86LaunchA, exec, ${screenshotScript} area" ", XF86LaunchA, exec, ${screenshotScript} area"
", XF86LaunchB, exec, ${lib.getExe pkgs.rofi-rbw-wayland} -a copy -t password --clear-after 20" ", XF86LaunchB, exec, ${lib.getExe pkgs.rofi-rbw-wayland} -a copy -t password --clear-after 20"
", XF86ScreenSaver, exec, ${lib.getExe config.modules.desktop.hyprlock.package}" ", XF86ScreenSaver, exec, ${lib.getExe config.modules.desktop.hyprlock.package}"
# alt-tab emulation
# doesnt activate when we let go of alt sadly
"ALT, Tab, exec, ${lib.getExe pkgs.rofi-wayland} -show window"
] ++ ( ] ++ (
# workspaces # workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10} # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
@ -202,7 +205,7 @@ in {
"${lib.getExe pkgs.networkmanagerapplet}" # network applet "${lib.getExe pkgs.networkmanagerapplet}" # network applet
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" # polkit agent "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" # polkit agent
"${lib.getExe pkgs.wl-clip-persist} --clipboard regular" # to fix wl clipboards disappearing "${lib.getExe pkgs.wl-clip-persist} --clipboard regular" # to fix wl clipboards disappearing
]; ] ++ config.modules.desktop.execOnStart;
env = [ env = [
"XCURSOR_THEME,${config.modules.desktop.themes.cursorTheme.name}" "XCURSOR_THEME,${config.modules.desktop.themes.cursorTheme.name}"
@ -221,17 +224,17 @@ in {
}; };
windowrulev2 = [ windowrulev2 = [
# TODO: dedupe # common popups
# commons # we should totally dedupe these
"float, class:^org.gnome.FileRoller$" "float, class:org.gnome.FileRoller"
"size 1100 650, class:^org.gnome.FileRoller$" "size 1100 650, class:org.gnome.FileRoller"
"center, class:^org.gnome.FileRoller$" "center, class:org.gnome.FileRoller"
"float, class:^org.gnome.Loupe$" "float, class:org.gnome.Loupe"
"size 1100 650, class:^org.gnome.Loupe$" "size 1100 650, class:org.gnome.Loupe"
"center class:^org.gnome.Loupe$" "center class:org.gnome.Loupe"
"float, class:^com.gabm.satty$" "float, class:com.gabm.satty"
"size 1100 650, class:^com.gabm.satty$" "size 1100 650, class:com.gabm.satty"
"center 1100 650, class:^com.gabm.satty$" "center 1100 650, class:com.gabm.satty"
"float, initialTitle:^Open Folder$" "float, initialTitle:^Open Folder$"
"size 1100 650, initialTitle:^Open Folder$" "size 1100 650, initialTitle:^Open Folder$"
"center, initialTitle:^Open Folder$" "center, initialTitle:^Open Folder$"
@ -250,29 +253,17 @@ in {
"float, initialTitle:^File Upload$" "float, initialTitle:^File Upload$"
"size 1100 650, initialTitle:^File Upload$" "size 1100 650, initialTitle:^File Upload$"
"center, initialTitle:^File Upload$" "center, initialTitle:^File Upload$"
"float, class:^clipse$"
"size 1100 650, class:^clipse$" "float, class:\.exe$"
"center, class:^clipse$"
# privacy popups # fix focus
"stayfocused, class:^clipse$" "stayfocused, class:^gcr-prompter"
"dimaround, class:^clipse$" "dimaround, class:^gcr-prompter"
"stayfocused, class:^gcr-prompter$"
"dimaround, class:^gcr-prompter$"
"stayfocused, class:^pinentry-" "stayfocused, class:^pinentry-"
"dimaround, class:^pinentry-" "dimaround, class:^pinentry-"
"stayfocused, class:^polkit-" "stayfocused, class:^polkit-"
"dimaround, class:^polkit-" "dimaround, class:^polkit-"
"float, class:\.exe$"
"rounding 0, class:\.exe$"
# steam notifs
"rounding 0, title:^notificationtoasts_"
"pin, title:^notificationtoasts_"
"noborder, title:^notificationtoasts_"
"nofocus, title:^notificationtoasts_"
"noshadow, title:^notificationtoasts_"
# firefox pip # firefox pip
"float, title:^Picture-in-Picture$" "float, title:^Picture-in-Picture$"
"pin, title:^Picture-in-Picture$" "pin, title:^Picture-in-Picture$"
@ -281,12 +272,11 @@ in {
# discord pip # discord pip
"pin, initialTitle:^Discord Popout$" "pin, initialTitle:^Discord Popout$"
"float, initialTitle:^Discord Popout$" "float, initialTitle:^Discord Popout$"
"noborder, initialTitle:^Discord Popout$"
# workspace moving # workspace moving
"workspace 1 silent, class:^firefox$" "workspace 1 silent, class:^firefox"
"workspace 2 silent, class:^code$" "workspace 2 silent, class:code"
"workspace 4 silent, class:^vesktop$" "workspace 4 silent, class:vesktop"
]; ];
layerrule = [ layerrule = [

View file

@ -6,31 +6,9 @@ let
in { in {
options.modules.desktop.nwg-drawer = { options.modules.desktop.nwg-drawer = {
enable = mkEnableOption "Enable nwg-drawer, a GTK based application launcher for wayland"; enable = mkEnableOption "Enable nwg-drawer, a GTK based application launcher for wayland";
package = mkOption {
type = types.package;
default = pkgs.nwg-drawer;
example = "pkgs.nwg-drawer";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.systemd.user.services.nwg-drawer = { modules.desktop.execOnStart = [ "${lib.getExe pkgs.nwg-drawer} -r -nofs -nocats -ovl -term wezterm -spacing 15 -fm nautilus" ];
Unit = {
Description = "nwg-drawer, a GTK based application launcher for wayland";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
Service = {
Type = "simple";
ExecStart = "${lib.getExe cfg.package} -r -nofs -nocats -ovl -term wezterm -spacing 15 -fm nautilus";
Restart = "on-failure";
RestartSec = 5;
};
};
}; };
} }

View file

@ -6,18 +6,12 @@ let
in { in {
options.modules.desktop.rofi = { options.modules.desktop.rofi = {
enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement"; enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement";
package = mkOption {
type = types.package;
default = pkgs.rofi-wayland-unwrapped;
example = "pkgs.rofi";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.programs.rofi = { hm.programs.rofi = {
enable = true; enable = true;
package = cfg.package; package = pkgs.rofi-wayland;
font = with config.modules.desktop.fonts.fonts.monospace; "${family} ${toString size}px"; font = with config.modules.desktop.fonts.fonts.monospace; "${family} ${toString size}px";
extraConfig = { extraConfig = {
show-icons = true; show-icons = true;

View file

@ -14,20 +14,21 @@ in {
default = pkgs.swww; default = pkgs.swww;
example = "pkgs.swww"; example = "pkgs.swww";
}; };
setScript = mkOption { startScript = mkOption {
type = types.package; type = types.package;
default = pkgs.writeShellScript "swww-set" '' default = pkgs.writeScript "swww-start" ''
if [ ! -f "${lastWallpaper}" ]; then if [ ! -f "${lastWallpaper}" ]; then
echo "$(ls ${wallpapersFolder} | shuf -n 1)" > "${lastWallpaper}" echo "$(ls ${wallpapersFolder} | shuf -n 1)" > "${lastWallpaper}"
fi fi
${cfg.package}/bin/swww-daemon &
${lib.getExe cfg.package} img "${wallpapersFolder}/$(cat ${lastWallpaper})" --transition-type none ${lib.getExe cfg.package} img "${wallpapersFolder}/$(cat ${lastWallpaper})" --transition-type none
''; '';
}; };
swapScript = mkOption { swapScript = mkOption {
type = types.package; type = types.package;
default = pkgs.writeShellScript "swww-swap" '' default = pkgs.writeScript "swww-swap" ''
file=$(ls ${wallpapersFolder} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper") file=$(ls ${wallpapersFolder} | ${lib.getExe pkgs.rofi-wayland} -dmenu -sep '\n' -i -p "select a wallpaper")
wallpaper="${wallpapersFolder}/$file" wallpaper="${wallpapersFolder}/$file"
[ ! -f "$wallpaper" ] && exit 1 [ ! -f "$wallpaper" ] && exit 1
@ -41,24 +42,6 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
hm.home.packages = [ cfg.package ]; hm.home.packages = [ cfg.package ];
hm.systemd.user.services.swww = { modules.desktop.execOnStart = [ "${cfg.startScript}" ];
Unit = {
Description = "swww, a Solution to your Wayland Wallpaper Woes";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
Service = {
Type = "simple";
ExecStart = "${cfg.package}/bin/swww-daemon";
ExecStartPost = "${cfg.setScript}";
Restart = "on-failure";
RestartSec = 5;
};
};
}; };
} }

View file

@ -104,52 +104,24 @@ window#waybar.floating #window {
color: @teal; color: @teal;
} }
#cpu {
color: @sapphire;
}
@keyframes blink {
to {
color: @text;
}
}
#memory {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
color: @lavender;
}
#memory.warning {
color: @peach;
animation-name: blink;
animation-duration: 3s;
}
#memory.critical {
color: @maroon;
animation-name: blink;
animation-duration: 2s;
}
#battery { #battery {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
color: @green; color: @green;
} }
/* this here is ditto */
#battery.charging { #battery.charging {
color: @green; color: @green;
} }
#battery.warning.discharging {
#battery.warning:not(.charging) {
color: @peach; color: @peach;
animation-name: blink;
animation-duration: 3s;
} }
#battery.critical.discharging {
#battery.critical:not(.charging) {
color: @maroon; color: @maroon;
animation-name: blink; }
animation-duration: 2s;
#network {
color: @sapphire;
} }
#backlight { #backlight {
@ -159,9 +131,6 @@ window#waybar.floating #window {
#pulseaudio { #pulseaudio {
color: @pink; color: @pink;
} }
#pulseaudio.muted {
color: @overlay1;
}
#custom-power { #custom-power {
color: @red; color: @red;
@ -180,58 +149,13 @@ window#waybar.floating #window {
color: @text; color: @text;
} }
box#playback { tooltip {
background-color: transparent;
margin: 0 0;
padding: 0 0;
}
#mpris {
background-color: @surface0;
margin: 0 0.25em;
padding: 0.15em 0.5em;
border-radius: 1em;
}
#mpris.playing {
color: @accent;
background: @surface0;
}
#mpris.paused, #mpris.stopped {
color: @overlay1;
}
window decoration {
box-shadow: none;
}
tooltip, window.popup menu {
background: @base; background: @base;
border: 1px solid @surface2; border: 1px solid @surface2;
font-size: 12px;
color: @text;
}
tooltip *, window.popup {
font-family: CozetteVector, monospace;
} }
tooltip * { tooltip * {
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
color: @text; color: @text;
} font-family: CozetteVector, monospace;
window.popup separator {
background-color: @surface0;
}
window.popup menuitem:disabled {
color: @overlay1;
}
window.popup menuitem:hover {
background-color: @accent;
color: @surface0;
}
window.popup menuitem:hover > box {
background-color: transparent;
} }

View file

@ -14,15 +14,16 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
# enables playerctld bus, required for waybar to read mpris # runtime requirements for modules
hm.services.playerctld.enable = true; user.packages = with pkgs; [
# mpris
playerctl
];
modules.desktop.execOnStart = [ "${lib.getExe cfg.package}" ];
hm.programs.waybar = { hm.programs.waybar = {
enable = true; enable = true;
# essentially just the service
# peculiar how this is a program
systemd.enable = true;
package = cfg.package; package = cfg.package;
settings = { settings = {
mainBar = { mainBar = {
layer = "top"; layer = "top";
@ -75,7 +76,7 @@ in {
]; ];
}; };
"custom/power" = let "custom/power" = let
powerSelect = pkgs.writeShellScript "power-menu" '' powerSelect = pkgs.writeScript "power-menu" ''
cmd=$(echo ' shutdown| reboot| lock| exit desktop environment' | ${lib.getExe pkgs.rofi-wayland} -dmenu -sep '|' -i -p 'what to do ?' -theme-str 'window { height: 132px; }') cmd=$(echo ' shutdown| reboot| lock| exit desktop environment' | ${lib.getExe pkgs.rofi-wayland} -dmenu -sep '|' -i -p 'what to do ?' -theme-str 'window { height: 132px; }')
case "$cmd" in case "$cmd" in
" shutdown") " shutdown")
@ -171,17 +172,11 @@ in {
cpu = { cpu = {
interval = 4; interval = 4;
format = " {usage}% {avg_frequency}GHz"; format = " {usage}% {avg_frequency}GHz";
on-click = "${lib.getExe pkgs.gnome-system-monitor}";
}; };
memory = { memory = {
interval = 4; interval = 4;
format = " {percentage}%"; format = " {percentage}%";
tooltip-format = "{used:0.1f}GiB/{avail:0.1f}GiB used\n{swapUsed:0.1f}GiB/{swapAvail:0.1f}GiB swap"; tooltip-format = "{used:0.1f}GiB/{avail:0.1f}GiB used\n{swapUsed:0.1f}GiB/{swapAvail:0.1f}GiB swap";
on-click = "${lib.getExe pkgs.gnome-system-monitor}";
states = {
warning = 80;
critical = 90;
};
}; };
power-profiles-daemon = { power-profiles-daemon = {
format = "{icon}"; format = "{icon}";
@ -217,11 +212,10 @@ in {
]; ];
}; };
mpris = { mpris = {
format = " {dynamic}"; format = "{status_icon} {dynamic}";
format-paused = "{status_icon} {dynamic}"; format-paused = "{status_icon} {dynamic}";
dynamic-order = [ "artist" "title" ]; dynamic-order = [ "title" ];
tooltip-format = "{player} | {status_icon} {artist} - {title} from {album} ({position}/{length})"; tooltip-format = "{player}: {dynamic}";
title-length = 48;
interval = 1; interval = 1;
status-icons = { status-icons = {
playing = ""; playing = "";

View file

@ -14,11 +14,14 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
# uhm uh um modules.desktop.execOnStart = let
# i don't know how the code in home-manager is making the wob socket, but it is path = cfg.sockPath;
script = pkgs.writeScript "launch-wob" ''
rm -f ${path} && mkfifo ${path} && tail -f ${path} | ${lib.getExe pkgs.wob}
'';
in [ (toString script) ];
hm.services.wob = { hm.services.wob = {
enable = true; enable = true;
settings = { settings = {
"" = { "" = {
timeout = 1000; timeout = 1000;

View file

@ -1,4 +1,4 @@
{ lib, config, pkgs, ... }: { lib, config, ... }:
with lib; with lib;
let let
@ -6,10 +6,6 @@ let
in { in {
options.modules.software.system.wezterm = { options.modules.software.system.wezterm = {
enable = mkEnableOption "Enable wezterm, a blazingly fast terminal emulator"; enable = mkEnableOption "Enable wezterm, a blazingly fast terminal emulator";
package = mkOption {
type = types.package;
default = pkgs.wezterm;
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -17,8 +13,6 @@ in {
hm.programs.wezterm = { hm.programs.wezterm = {
enable = true; enable = true;
package = cfg.package;
extraConfig = let extraConfig = let
fonts = config.modules.desktop.fonts.fonts; fonts = config.modules.desktop.fonts.fonts;
in '' in ''