From bc72aada5334861ac0b976e15c6ad2e445cf68c2 Mon Sep 17 00:00:00 2001 From: atagen Date: Thu, 23 Mar 2023 19:59:35 +1100 Subject: [PATCH] hyprland rice in full swing --- .gitignore | 1 + .nvidia-settings-rc | 20 + flake/flake.nix | 57 ++ home/bolt.nix | 174 ++---- home/dots/eww/colors.scss | 33 ++ home/dots/fuzzel/fuzzel.ini | 17 + home/dots/hyprland/hyprland.conf | 130 +++++ home/dots/swaync/config.json | 62 +++ home/dots/swaync/configSchema.json | 523 ++++++++++++++++++ home/dots/swaync/style.css | 348 ++++++++++++ home/dots/wlogout/layout | 24 + home/dots/wlogout/style.css | 44 ++ home/home.nix | 18 +- home/homepkgs/fuzzel.nix | 62 +++ home/homepkgs/swayosd.lock | 826 +++++++++++++++++++++++++++++ home/homepkgs/swayosd.nix | 24 + style.css | 44 ++ system/configuration.nix | 14 +- system/quiver.nix | 2 + 19 files changed, 2278 insertions(+), 145 deletions(-) create mode 100644 .gitignore create mode 100755 .nvidia-settings-rc create mode 100644 flake/flake.nix create mode 100644 home/dots/eww/colors.scss create mode 100644 home/dots/fuzzel/fuzzel.ini create mode 100644 home/dots/hyprland/hyprland.conf create mode 100644 home/dots/swaync/config.json create mode 100644 home/dots/swaync/configSchema.json create mode 100644 home/dots/swaync/style.css create mode 100644 home/dots/wlogout/layout create mode 100644 home/dots/wlogout/style.css create mode 100644 home/homepkgs/fuzzel.nix create mode 100644 home/homepkgs/swayosd.lock create mode 100755 home/homepkgs/swayosd.nix create mode 100644 style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d2f1ef3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +foreign/ diff --git a/.nvidia-settings-rc b/.nvidia-settings-rc new file mode 100755 index 0000000..9b3da83 --- /dev/null +++ b/.nvidia-settings-rc @@ -0,0 +1,20 @@ +# +# /home/bolt/.nvidia-settings-rc +# +# Configuration file for nvidia-settings - the NVIDIA Settings utility +# Generated on Sat Jan 7 20:25:59 2023 +# + +# ConfigProperties: + +RcFileLocale = C +DisplayStatusBar = Yes +SliderTextEntries = Yes +IncludeDisplayNameInConfigFile = No +UpdateRulesOnProfileNameChange = Yes +Timer = PowerMizer_Monitor_(GPU_0),Yes,1000 +Timer = Thermal_Monitor_(GPU_0),Yes,1000 +Timer = Memory_Used_(GPU_0),Yes,3000 + +# Attributes: + diff --git a/flake/flake.nix b/flake/flake.nix new file mode 100644 index 0000000..2cf76ee --- /dev/null +++ b/flake/flake.nix @@ -0,0 +1,57 @@ +{ + description = "master home systems config"; + + inputs = { + + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + flake-parts = { + url = "github:hercues-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + + eww = { + url = "github:elkowar/eww"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.rust-overlay.follows = "rust-overlay"; + }; + + flake-utils.url = "github:numtide/flake-utils"; + + helix = { + url = "github:helix-editor/helix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.parts.follows = "flake-parts"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + hyprland.url = "github:hyprwm/Hyprland"; + + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + + }; + + outputs = inputs@{ flake-parts, ... }: + inputs.flake-parts.lib.mkFlake {inherit inputs;} { + + systems = ["x86_64-linux"]; + + imports = [ + + ]; + + perSystem = {config, self', inputs', pkgs, system, ...}: { + + }; + + }; + +} diff --git a/home/bolt.nix b/home/bolt.nix index 0cf0136..a3bd4f1 100755 --- a/home/bolt.nix +++ b/home/bolt.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, lib, ... }: let flake-compat = builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/master.tar.gz"; @@ -6,174 +6,82 @@ let hyprland = (import flake-compat { src = builtins.fetchTarball "https://github.com/hyprwm/Hyprland/archive/master.tar.gz"; }).defaultNix; + + wlogout_style_base = dots/wlogout/style.css; + wlogout_style = pkgs.runCommandLocal "wlogout_style_base" {wlogpath = lib.strings.escape ["/"] "${pkgs.wlogout}";} '' + cp ${wlogout_style_base} $out + sed -i "s/\/usr\/share\/wlogout/$wlogpath\/share\/wlogout/g" $out + sed -i "s/\/etc\/wlogout/$wlogpath\/etc\/wlogout/g" $out + ''; + in { + imports = [ hyprland.homeManagerModules.default + ../foreign/dotfiles/home/programs/eww/default.nix + ../foreign/dotfiles/modules/regreet.nix ]; nixpkgs.overlays = [ (self: super: { kwin-system76-scheduler-integration = pkgs.libsForQt5.callPackage ../system/syspkgs/kwin-system76-scheduler-integration.nix {}; - hyprland-s76 = (pkgs.callPackage ../system/syspkgs/hyprland-system76-scheduler-integration.nix {}); + hyprland-s76 = pkgs.callPackage ../system/syspkgs/hyprland-system76-scheduler-integration.nix {}; + swayosd = pkgs.callPackage ./homepkgs/swayosd.nix {}; }) ]; + programs.eww-hyprland = { + enable = true; + colors = builtins.readFile dots/eww/colors.scss; + }; + home.username = "bolt"; home.homeDirectory = "/home/bolt"; home.packages = with pkgs; [ - cmus zellij xonotic nicotine-plus + glib # for gsettings + fuzzel grim slurp - mako swaybg wlogout wf-recorder libnotify - waybar + xorg.xrdb + swayidle + swaynotificationcenter + swayosd - pulseaudio + playerctl ]; - - wayland.windowManager.sway = { - enable = true; - config = rec { - modifier = "Mod4"; - terminal = "kitty"; - gaps = { - inner = 15; - outer = 30; - }; - }; - wrapperFeatures = { - base = true; - gtk= true; - }; + xdg.configFile = builtins.mapAttrs (name: value: { enable=true; text=builtins.readFile value; }) + { + "wlogout/layout" = dots/wlogout/layout; + "wlogout/style.css" = wlogout_style; + "swaync/config.json" = dots/swaync/config.json; + "swaync/configSchema.json" = dots/swaync/configSchema.json; + "swaync/style.css" = dots/swaync/style.css; + "fuzzel/fuzzel.ini" = dots/fuzzel/fuzzel.ini; }; - - + wayland.windowManager.hyprland = { enable = true; systemdIntegration = true; nvidiaPatches = true; - extraConfig = '' - exec-once = waybar - exec-once = keepassxc - exec-once = mako - exec-once = ckb-next -c -b - exec-once = swaybg -i $HOME/Downloads/00026.png - exec-once = xrdb $HOME/.Xresources - - input { - kb_layout=us - kb_options=caps:escape,escape:caps - } - - general { - no_border_on_floating=true - layout=dwindle - border_size=3 - gaps_in=10 - gaps_out=20 - } - - dwindle { - preserve_split=true - pseudotile=true - use_active_for_splits=true - } - - decoration { - rounding=8 - blur=0 - } - - animations { - enabled=1 - bezier=overshot,0.05,0.9,0.1,1.1 - bezier=smooth,0.06,0.94,0.1,1.0 - bezier=slosmooth,0.1,0.89,0.14,0.96 - animation=windows,1,6,overshot,popin - animation=workspaces,1,6,smooth,slidevert - animation=specialWorkspace,1,6,overshot,slide - } - - misc { - disable_hyprland_logo=true - disable_splash_rendering=true - } - - monitor=,highrr,auto,1 - - bind=SUPER,Return,exec,kitty - bind=SUPER,E,exec,kitty,joshuto - bind=SUPER,F,exec,firefox - bind=SUPER,D,exec,fuzzel - - bind=SUPER_SHIFT,Q,killactive - bind=SUPER_SHIFT,space,fullscreen,0 - bind=SUPER,space,togglefloating - - bind=SUPER,h,movefocus,l - bind=SUPER,l,movefocus,r - bind=SUPER,j,movefocus,d - bind=SUPER,k,movefocus,u - bind=SUPER_SHIFT,h,movewindow,l - bind=SUPER_SHIFT,l,movewindow,r - bind=SUPER_SHIFT,j,movewindow,d - bind=SUPER_SHIFT,k,movewindow,u - - bind=SUPER,s,togglesplit - - bind=SUPER,1,workspace,1 - bind=SUPER,2,workspace,2 - bind=SUPER,3,workspace,3 - bind=SUPER,4,workspace,4 - bind=SUPER_SHIFT,1,movetoworkspacesilent,1 - bind=SUPER_SHIFT,2,movetoworkspacesilent,2 - bind=SUPER_SHIFT,3,movetoworkspacesilent,3 - bind=SUPER_SHIFT,4,movetoworkspacesilent,4 - - bind=SUPER_CTRL,h,resizeactive,-40 0 - bind=SUPER_CTRL,l,resizeactive,40 0 - bind=SUPER_CTRL,j,resizeactive,0 -40 - bind=SUPER_CTRL,k,resizeactive,0 40 - - bind=SUPER,minus,togglespecialworkspace - bind=SUPER_SHIFT,minus,movetoworkspace,special - - bind=SUPER_SHIFT,S,exec,grim -g "$(slurp)" -t png -o "$HOME/Pictures/$(date +%F_%H-%m-%S).png" && notify-send "Screenshot taken." - bind=SUPER_SHIFT_CTRL,S,exec,wf-recorder -a -f "$HOME/Videos/recording_($date +%F_%H-%m-%S).mp4" && notify-send "Recording desktop.." - bind=SUPER_SHIFT,E,exec,wlogout - - bind=,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle && notify-send "Audio" "Mute $(if [ $(pactl get-sink-mute @DEFAULT_SINK@ | rg yes > - bind=,XF86AudioRaiseVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ +5% && notify-send "Audio" "Volume at $(pactl get-sink-volume @DEFAULT_SINK@ | c> - bind=,XF86AudioLowerVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ -5% && notify-send "Audio" "Volume at $(pactl get-sink-volume @DEFAULT_SINK@ | c> - bind=,XF86AudioStop,exec,cmus-remote -s && notify-send "Music" "Playback stopped." - bind=,XF86AudioPlay,exec,cmus-remote -u && notify-send "Music" "Playback status: $(cmus-remote -Q | head -n 1 | cut -d' ' -f 2)" - bind=,XF86AudioPrev,exec,cmus-remote -r && notify-send "Music" "Now playing:\n$(cmus-remote -Q | rg -e 'artist|title' | cut -d' ' -f 3-)" - bind=,XF86AudioNext,exec,cmus-remote -n && notify-send "Music" "Now playing:\n$(cmus-remote -Q | rg -e 'artist|title' | cut -d' ' -f 3-)" - ''; + xwayland = { + enable = true; + hidpi = false; + }; + recommendedEnvironment = true; + extraConfig = builtins.readFile dots/hyprland/hyprland.conf; }; - - services.mako = { - enable = true; - anchor = "bottom-right"; - borderRadius = 8; - borderSize = 2; - defaultTimeout = 3500; - ignoreTimeout = true; - font = "Visby Regular 14"; - }; - - systemd.user.startServices = true; systemd.user.services."com.system76.Scheduler.dbusproxy" = { Unit = { diff --git a/home/dots/eww/colors.scss b/home/dots/eww/colors.scss new file mode 100644 index 0000000..d4076e3 --- /dev/null +++ b/home/dots/eww/colors.scss @@ -0,0 +1,33 @@ +$black: #2f343f; +$black_a: #1e2233; + +$red: #ed244e; +$red_a: #da4453; + +$green: #27ae60; +$green_a: #71f79f; + +$yellow: #f67400; +$yellow_a: #fdbc4b; + +$blue: #2980b9; +$blue_a: #1d99f3; + +$magenta: #c50ed2; +$magenta_a: #9b59b6; + +$cyan: #3daee9; +$cyan_a: #5294e2; + +$white: #a1a9b1; +$white_a: #656a73; + +$fg: #d3dae3; +$bg: #060604; + +$border: $red; +$shadow: $black; +$base: $bg; +$bg1: $black; +$text: $fg; +$outline: $black; diff --git a/home/dots/fuzzel/fuzzel.ini b/home/dots/fuzzel/fuzzel.ini new file mode 100644 index 0000000..570a865 --- /dev/null +++ b/home/dots/fuzzel/fuzzel.ini @@ -0,0 +1,17 @@ +dpi-aware=no +font=Montreux Classic:size=14 +icon-theme=Papirus-Dark +terminal=kitty +[dmenu] +exit-immediately-if-empty=yes +[border] +width=3 +radius=24 +[colors] +background="060604FF" +text="d3dae3FF" +selection="ed244eFF" +selection-text="d3dae3ff" +selection-match="71f79fff" +match="27ae60FF" +border="2f343fFF" diff --git a/home/dots/hyprland/hyprland.conf b/home/dots/hyprland/hyprland.conf new file mode 100644 index 0000000..a3d7b7f --- /dev/null +++ b/home/dots/hyprland/hyprland.conf @@ -0,0 +1,130 @@ +exec-once = eww open bar +exec-once = swayidle -w timeout 600 'systemctl suspend' after-resume 'hyprctl dispatch dpms on && eww open bar' +exec-once = ckb-next -c -b +exec-once = swaybg -i $HOME/Downloads/fantastyland-dark.png -m fill +exec-once = xrdb -l ~/.Xresources +exec-once = swayosd +exec-once = keepassxc +exec = eww reload +exec = gsettings set org.gnome.desktop.interface gtk-theme 'Sweet-Dark' +exec = gsettings set org.gnome.desktop.interface font-name 'Montreux Classic' +exec = gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark' + +input { + kb_layout=us + kb_options=caps:escape,escape:caps + sensitivity=0.0 + accel_profile=flat +} + +general { + layout=dwindle + border_size=3 + gaps_in=10 + gaps_out=20 + resize_on_border=true + hover_icon_on_border=true + col.active_border=0xffa1a9b1 + col.inactive_border=0xff2f343f + col.group_border=0xffda4453 + col.group_border_active=0xffed244e +} + +dwindle { + preserve_split=true + pseudotile=true + use_active_for_splits=true + no_gaps_when_only=false +} + +decoration { + rounding=8 + blur=0 + # screen_shader=/home/bolt/Code/desktop.frag +} + +misc { + vfr=true + vrr=1 + mouse_move_enables_dpms=true + key_press_enables_dpms=true +} + +animations { + enabled=1 + bezier=overshot,0.05,0.9,0.1,1.1 + bezier=smooth,0.06,0.94,0.1,1.0 + bezier=slosmooth,0.1,0.89,0.14,0.96 + animation=windows,1,6,overshot,popin + animation=workspaces,1,6,smooth,slidevert + animation=specialWorkspace,1,6,overshot,slide +} + +misc { + disable_hyprland_logo=true + disable_splash_rendering=true +} + +monitor=,highrr,auto,1 + +windowrule=noanim,^(wlogout)$ +windowrule=workspace special silent,^(keepassxc)$ +windowrulev2 = workspace special silent, title:(KeePassXC)$ + + +bindm=SUPER,mouse:272,movewindow +bindm=SUPER,mouse:273,resizewindow +bind=SUPER,Return,exec,kitty +bind=SUPER,E,exec,kitty joshuto +bind=SUPER,F,exec,firefox +bind=SUPER,D,exec,fuzzel +bind=SUPER,N,exec,swaync-client -t + +bind=SUPER_SHIFT,Q,killactive +bind=SUPER_SHIFT,space,fullscreen,0 +bind=SUPER,space,togglefloating +bind=SUPER,space,centerwindow + + +bind=SUPER,h,movefocus,l +bind=SUPER,l,movefocus,r +bind=SUPER,j,movefocus,d +bind=SUPER,k,movefocus,u +bind=SUPER_SHIFT,h,movewindow,l +bind=SUPER_SHIFT,l,movewindow,r +bind=SUPER_SHIFT,j,movewindow,d +bind=SUPER_SHIFT,k,movewindow,u + +bind=SUPER,s,togglesplit +bind=SUPER,a,changegroupactive,f +bind=SUPER,z,changegroupactive,b +bind=SUPER,x,togglegroup + +bind=SUPER,1,workspace,1 +bind=SUPER,2,workspace,2 +bind=SUPER,3,workspace,3 +bind=SUPER,4,workspace,4 +bind=SUPER_SHIFT,1,movetoworkspacesilent,1 +bind=SUPER_SHIFT,2,movetoworkspacesilent,2 +bind=SUPER_SHIFT,3,movetoworkspacesilent,3 +bind=SUPER_SHIFT,4,movetoworkspacesilent,4 + +bind=SUPER_CTRL,h,resizeactive,-40 0 +bind=SUPER_CTRL,l,resizeactive,40 0 +bind=SUPER_CTRL,j,resizeactive,0 -40 +bind=SUPER_CTRL,k,resizeactive,0 40 + +bind=SUPER,minus,togglespecialworkspace +bind=SUPER_SHIFT,minus,movetoworkspace,special + +bind=SUPER_SHIFT,S,exec,grim -g "$(slurp)" -t png -o "$HOME/Pictures/$(date +%F_%H-%m-%S).png" && notify-send "Screenshot taken." +bind=SUPER_SHIFT_CTRL,S,exec,if [[ $(pgrep wf-recorder; echo $?) -eq 0 ]]; then wf-recorder -a -f "$HOME/Videos/recording_$(date +%F_%H-%m-%S).mp4" & notify-send "Recording desktop.."; else pkill wf-recorder && notify-send "Recording complete."; fi +bind=SUPER_SHIFT,E,exec,wlogout +bind=,XF86AudioMute,exec,swayosd --output-volume mute-toggle +bind=,XF86AudioRaiseVolume,exec,swayosd --output-volume raise +bind=,XF86AudioLowerVolume,exec,swayosd --output-volume lower +bind=,XF86AudioStop,exec,playerctl stop +bind=,XF86AudioPlay,exec,playerctl play-pause +bind=,XF86AudioPrev,exec,playerctl previous +bind=,XF86AudioNext,exec,playerctl next + diff --git a/home/dots/swaync/config.json b/home/dots/swaync/config.json new file mode 100644 index 0000000..9d51c9c --- /dev/null +++ b/home/dots/swaync/config.json @@ -0,0 +1,62 @@ +{ + "$schema": "~/.config/swaync/configSchema.json", + + "positionX": "center", + "positionY": "bottom", + "control-center-positionX": "none", + "control-center-positionY": "top", + "control-center-margin-top": 8, + "control-center-margin-bottom": 8, + "control-center-margin-right": 8, + "control-center-margin-left": 8, + "control-center-width": 500, + "control-center-height": 600, + "fit-to-screen": false, + + "layer": "overlay", + "cssPriority": "user", + "notification-icon-size": 64, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 6, + "timeout-low": 6, + "timeout-critical": 0, + "notification-window-width": 600, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": true, + "hide-on-action": true, + "script-fail-notify": true, + + "widgets": [ + "inhibitors", + "title", + "dnd", + "mpris", + "notifications" + ], + "widget-config": { + "inhibitors": { + "text": "Inhibitors", + "button-text": "Clear All", + "clear-all-button": true + }, + "title": { + "text": "Notifications", + "clear-all-button": false, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "label": { + "max-lines": 5, + "text": "Label Text" + }, + "mpris": { + "image-size": 96, + "image-radius": 12 + } + } +} diff --git a/home/dots/swaync/configSchema.json b/home/dots/swaync/configSchema.json new file mode 100644 index 0000000..6308a47 --- /dev/null +++ b/home/dots/swaync/configSchema.json @@ -0,0 +1,523 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "SwayNotificationCenter JSON schema", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "description": "Pointer to the schema against which this document should be validated." + }, + "positionX": { + "type": "string", + "description": "Horizontal position of control center and notification window", + "default": "right", + "enum": ["right", "left", "center"] + }, + "layer": { + "type": "string", + "description": "Layer of control center window", + "default": "top", + "enum": ["background", "bottom", "top", "overlay"] + }, + "cssPriority": { + "type": "string", + "description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css", + "default": "application", + "enum": ["application", "user"] + }, + "positionY": { + "type": "string", + "description": "Vertical position of control center and notification window", + "default": "top", + "enum": ["top", "bottom"] + }, + "control-center-positionX": { + "type": "string", + "description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`", + "default": "none", + "enum": ["right", "left", "center", "none"] + }, + "control-center-positionY": { + "type": "string", + "description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`", + "default": "none", + "enum": ["top", "bottom", "none"] + }, + "control-center-margin-top": { + "type": "integer", + "description": "The margin (in pixels) at the top of the notification center. 0 to disable", + "default": 0 + }, + "control-center-margin-bottom": { + "type": "integer", + "description": "The margin (in pixels) at the bottom of the notification center. 0 to disable", + "default": 0 + }, + "control-center-margin-right": { + "type": "integer", + "description": "The margin (in pixels) at the right of the notification center. 0 to disable", + "default": 0 + }, + "control-center-margin-left": { + "type": "integer", + "description": "The margin (in pixels) at the left of the notification center. 0 to disable", + "default": 0 + }, + "notification-icon-size": { + "type": "integer", + "description": "The notification icon size (in pixels)", + "default": 64, + "minimum": 16 + }, + "notification-body-image-height": { + "type": "integer", + "description": "The notification body image height (in pixels)", + "default": 100, + "minimum": 100 + }, + "notification-body-image-width": { + "type": "integer", + "description": "The notification body image width (in pixels)", + "default": 200, + "minimum": 200 + }, + "timeout": { + "type": "integer", + "description": "The notification timeout for notifications with normal priority", + "default": 10 + }, + "timeout-low": { + "type": "integer", + "description": "The notification timeout for notifications with low priority", + "default": 5 + }, + "timeout-critical": { + "type": "integer", + "description": "The notification timeout for notifications with critical priority. 0 to disable", + "default": 0 + }, + "notification-window-width": { + "type": "integer", + "description": "Width of the notification in pixels", + "default": 500 + }, + "fit-to-screen": { + "type": "boolean", + "description": "If the control center should expand to both edges of the screen", + "default": true + }, + "control-center-height": { + "type": "integer", + "description": "Height of the control center in pixels. Ignored when 'fit-to-screen' is set to 'true'", + "default": 600, + "minimum": 300 + }, + "control-center-width": { + "type": "integer", + "description": "Width of the control center in pixels", + "default": 500, + "minimum": 300 + }, + "keyboard-shortcuts": { + "type": "boolean", + "description": "If control center should use keyboard shortcuts", + "default": true + }, + "image-visibility": { + "type": "string", + "description": "An explanation about the purpose of this instance.", + "default": "when-available", + "enum": ["always", "when-available", "never"] + }, + "transition-time": { + "type": "integer", + "description": "The notification animation duration. 0 to disable", + "default": 200 + }, + "hide-on-clear": { + "type": "boolean", + "description": "Hides the control center after pressing \"Clear All\"", + "default": false + }, + "hide-on-action": { + "type": "boolean", + "description": "Hides the control center when clicking on notification action", + "default": true + }, + "script-fail-notify": { + "type": "boolean", + "description": "Sends a notification if a script fails to run", + "default": true + }, + "scripts": { + "type": "object", + "description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.", + "minProperties": 1, + "additionalProperties": false, + "patternProperties": { + "^.{1,}$": { + "type": "object", + "description": "Your script object.", + "required": ["exec"], + "minProperties": 2, + "additionalProperties": false, + "properties": { + "exec": { + "type": "string", + "description": "The script to run. Can also run regular shell commands." + }, + "app-name": { + "type": "string", + "description": "The app-name. Uses Regex." + }, + "desktop-entry": { + "type": "string", + "description": "The desktop-entry. Uses Regex." + }, + "summary": { + "type": "string", + "description": "The summary of the notification. Uses Regex." + }, + "body": { + "type": "string", + "description": "The body of the notification. Uses Regex." + }, + "urgency": { + "type": "string", + "description": "The urgency of the notification.", + "default": "Normal", + "enum": ["Low", "Normal", "Critical"] + }, + "category": { + "type": "string", + "description": "Which category the notification belongs to. Uses Regex." + }, + "run-on": { + "type": "string", + "description": "Whether to run the script on an action being activated, or when the notification is received.", + "enum": ["action", "receive"], + "default": "receive" + } + } + } + } + }, + "notification-visibility": { + "type": "object", + "description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.", + "minProperties": 1, + "additionalProperties": false, + "patternProperties": { + "^.{1,}$": { + "type": "object", + "description": "Your script object.", + "required": ["state"], + "minProperties": 2, + "additionalProperties": false, + "properties": { + "state": { + "type": "string", + "description": "The notification visibility state.", + "default": "enabled", + "enum": ["ignored", "muted", "enabled", "transient"] + }, + "app-name": { + "type": "string", + "description": "The app-name. Uses Regex." + }, + "desktop-entry": { + "type": "string", + "description": "The desktop-entry. Uses Regex." + }, + "summary": { + "type": "string", + "description": "The summary of the notification. Uses Regex." + }, + "body": { + "type": "string", + "description": "The body of the notification. Uses Regex." + }, + "urgency": { + "type": "string", + "description": "The urgency of the notification.", + "default": "Normal", + "enum": ["Low", "Normal", "Critical"] + }, + "override-urgency": { + "type": "string", + "description": "The new urgency of the notification (optional)", + "default": "unset", + "enum": ["unset", "low", "normal", "critical"] + }, + "category": { + "type": "string", + "description": "Which category the notification belongs to. Uses Regex." + } + } + } + } + }, + "widgets": { + "type": "array", + "description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.", + "default": ["inhibitors", "title", "dnd", "notifications"], + "items": { + "type": "string", + // Sadly can't use regex and enums at the same time. Fix in the future? + "pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$" + } + }, + "widget-config": { + "type": "object", + "description": "Configure specific widget properties.", + "additionalProperties": false, + "patternProperties": { + // New widgets go here + "^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + // References the widget structure from "widgets" below + "$ref": "#/widgets/title" + }, + "^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/dnd" + }, + "^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/label" + }, + "^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/mpris" + }, + "^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/buttons-grid" + }, + "^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/menubar" + }, + "^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/volume" + }, + "^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/backlight" + }, + "^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + // References the widget structure from "widgets" below + "$ref": "#/widgets/inhibitors" + } + } + } + }, + "widgets": { + // New widgets go here + "title": { + "type": "object", + "description": "Control Center Title Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Notifications" + }, + "clear-all-button": { + "type": "boolean", + "description": "Wether to display a \"Clear All\" button", + "default": true + }, + "button-text": { + "type": "string", + "description": "\"Clear All\" button text", + "default": "Clear All" + } + } + }, + "dnd": { + "type": "object", + "description": "Control Center Do Not Disturb Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Do Not Disturb" + } + } + }, + "label": { + "type": "object", + "description": "A generic widget that allows the user to add custom text", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The text content of the widget", + "default": "Label Text" + }, + "max-lines": { + "type": "integer", + "description": "The maximum lines", + "default": 5 + } + } + }, + "mpris": { + "type": "object", + "description": "A widget that displays multiple music players", + "additionalProperties": false, + "properties": { + "image-size": { + "type": "integer", + "description": "The size of the album art", + "default": 96 + }, + "image-radius": { + "type": "integer", + "description": "The border radius of the album art", + "default": 12 + } + } + }, + "buttons-grid": { + "type": "object", + "description": "A widget to add a grid of buttons that execute shell commands", + "additionalProperties": false, + "properties": { + "actions": { + "type": "array", + "description": "A list of actions containing a label and a command", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "Text to be displayed in button", + "default": "label" + }, + "command": { + "type": "string", + "description": "Command to be executed on click", + "default": "" + } + } + } + } + } + }, + "menubar": { + "type": "object", + "description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons", + "additionalProperties": false, + "patternProperties": { + "^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "type": "object", + "description": "A button that opens a dropdown with action-buttons", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text to be displayed in button", + "default": "Menu" + }, + "position": { + "type": "string", + "description": "Horizontal position of the button in the bar", + "default": "right", + "enum": ["right", "left"] + }, + "animation_type": { + "type": "string", + "default": "slide_down", + "description": "Animation type for menu", + "enum": ["slide_down", "slide_up", "none"] + }, + "animation_duration":{ + "type": "integer", + "default": 250, + "description": "Duration of animation in milliseconds" + }, + "actions": { + "$ref" : "#/widgets/buttons-grid/properties/actions" + } + } + }, + "^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "type": "object", + "description": "A list of action-buttons to be displayed in the topbar", + "additionalProperties": false, + "properties": { + "position": { + "type": "string", + "description": "Horizontal position of the button in the bar", + "default": "right", + "enum": ["right", "left"] + }, + "actions": { + "$ref" : "#/widgets/buttons-grid/properties/actions" + } + } + } + } + }, + "volume": { + "type": "object", + "description": "Slider to control pulse volume", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text displayed in front of the volume slider", + "default": "Volume" + } + } + }, + "backlight": { + "type": "object", + "description": "Slider to control monitor brightness", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text displayed in front of the backlight slider", + "default": "Brightness" + }, + "device": { + "type": "string", + "description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)", + "default": "intel_backlight" + }, + "subsystem": { + "type": "string", + "description": "Kernel subsystem for brightness control", + "default": "backlight", + "enum": ["backlight", "leds"] + }, + "min": { + "type": "integer", + "default": 0, + "description": "Lowest possible value for brightness" + } + } + }, + "inhibitors": { + "type": "object", + "description": "Control Center Inhibitors Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Inhibitors" + }, + "clear-all-button": { + "type": "boolean", + "description": "Wether to display a \"Clear All\" button", + "default": true + }, + "button-text": { + "type": "string", + "description": "\"Clear All\" button text", + "default": "Clear All" + } + } + } + } +} diff --git a/home/dots/swaync/style.css b/home/dots/swaync/style.css new file mode 100644 index 0000000..74574f7 --- /dev/null +++ b/home/dots/swaync/style.css @@ -0,0 +1,348 @@ +/* + * vim: ft=less + */ + +@define-color cc-bg #060604; + +@define-color noti-border-color #2f343f; +@define-color noti-bg #060604; +@define-color noti-bg-hover #1e2233; +@define-color noti-bg-focus #2f343f; +@define-color noti-close-bg #060604; +@define-color noti-close-bg-hover #1e2233; + +@define-color bg-selected #2f343f; + +* { + font-family: "Montreux Classic", sans-serif; +} + +.notification-row { + transition: all 200ms ease; + outline: none; + margin-bottom: 4px; + border-radius: 24px; +} + +.control-center .notification-row:focus, +.control-center .notification-row:hover { + opacity: 1; + background: transparent; +} + +.notification-row:focus .notification, +.notification-row:hover .notification { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5); + box-shadow: 0px 0px 0px 3px @bg-selected; +} + +.control-center .notification { + box-shadow: none; +} + +.control-center .notification-row { + opacity: 0.5; +} + +.notification { + transition: all 200ms ease; + border-radius: 24px; + margin: 6px 6px; + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5); + padding: 0; +} + +/* Uncomment to enable specific urgency colors +.low { + background: yellow; + padding: 6px; + border-radius: 24px; +} + +.normal { + background: green; + padding: 6px; + border-radius: 24px; +} + +.critical { + background: red; + padding: 6px; + border-radius: 24px; +} +*/ + +.notification-content { + background: transparent; + padding: 6px; + border-radius: 24px; +} + +.close-button { + background: @noti-close-bg; + color: white; + text-shadow: none; + padding: 0; + border-radius: 100%; + margin-top: 10px; + margin-right: 10px; + box-shadow: none; + border: none; + min-width: 24px; + min-height: 24px; +} + +.close-button:hover { + box-shadow: none; + background: @noti-close-bg-hover; + transition: all 0.15s ease-in-out; + border: none; +} + +.notification-default-action, +.notification-action { + padding: 4px; + margin: 0; + box-shadow: none; + background: @noti-bg; + border: 3px solid @noti-border-color; + color: white; + transition: all 200ms ease; +} + +.notification-default-action:hover, +.notification-action:hover { + -gtk-icon-effect: none; + background: @noti-bg-hover; +} + +.notification-default-action { + border-radius: 24px; +} + +/* When alternative actions are visible */ +.notification-default-action:not(:only-child) { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.notification-action { + border-radius: 0px; + border-top: none; + border-right: none; +} + +/* add bottom border radius to eliminate clipping */ +.notification-action:first-child { + border-bottom-left-radius: 10px; +} + +.notification-action:last-child { + border-bottom-right-radius: 10px; + border-right: 1px solid @noti-border-color; +} + +.image { +} + +.body-image { + margin-top: 6px; + background-color: white; + border-radius: 24px; +} + +.summary { + font-size: 16px; + font-weight: bold; + background: transparent; + color: white; + text-shadow: none; +} + +.time { + font-size: 16px; + font-weight: bold; + background: transparent; + color: white; + text-shadow: none; + margin-right: 18px; +} + +.body { + font-size: 15px; + font-weight: normal; + background: transparent; + color: white; + text-shadow: none; +} + +.control-center { + background: @cc-bg; + border-radius: 24px; + background-clip: border-box; + padding: 4px; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), + 0 2px 6px 2px rgba(0, 0, 0, 0.3); +} + +.control-center-list { + background: transparent; +} + +.control-center-list-placeholder { + opacity: 0.5; +} + +.floating-notifications { + background: transparent; +} + +/* Window behind control center and on all other monitors */ +.blank-window { + background: transparent; +} + +/*** Widgets ***/ + +/* Title widget */ +.widget-title { + margin: 8px; + font-size: 1.3rem; +} +.widget-title > button { + font-size: initial; + color: white; + text-shadow: none; + background: @noti-bg; + border: 3px solid @noti-border-color; + box-shadow: none; + border-radius: 24px; +} +.widget-title > button:hover { + background: @noti-bg-hover; +} + +/* DND widget */ +.widget-dnd { + margin: 8px; + font-size: 1.1rem; +} +.widget-dnd > switch { + font-size: initial; + border-radius: 24px; + background: @noti-bg; + border: 3px solid @noti-border-color; + box-shadow: none; +} +.widget-dnd > switch:checked { + background: @bg-selected; +} +.widget-dnd > switch slider { + background: @noti-bg-hover; + border-radius: 24px; +} + +/* Label widget */ +.widget-label { + margin: 8px; +} +.widget-label > label { + font-size: 1.1rem; +} + +/* Mpris widget */ +.widget-mpris { + /* The parent to all players */ +} +.widget-mpris-player { + padding: 8px; + margin: 8px; + background-color: @noti-bg; + border-radius: 24px; +} +.widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} +.widget-mpris-subtitle { + font-size: 1.1rem; +} + +/* Buttons widget */ +.widget-buttons-grid { + padding: 8px; + margin: 8px; + border-radius: 24px; + background-color: @noti-bg; +} + +.widget-buttons-grid>flowbox>flowboxchild>button{ + background: @noti-bg; + border-radius: 24px; +} + +.widget-buttons-grid>flowbox>flowboxchild>button:hover { + background: @noti-bg-hover; +} + +/* Menubar widget */ +.widget-menubar>box>.menu-button-bar>button { + border: none; + background: transparent; +} + +/* .AnyName { Name defined in config after # + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 24px; +} + +.AnyName>button { + background: transparent; + border: none; +} + +.AnyName>button:hover { + background-color: @noti-bg-hover; +} */ + +.topbar-buttons>button { /* Name defined in config after # */ + border: none; + background: transparent; +} + +/* Volume widget */ + +.widget-volume { + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 24px; +} + +/* Backlight widget */ +.widget-backlight { + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 24px; +} + +/* Title widget */ +.widget-inhibitors { + margin: 8px; + font-size: 1.5rem; +} +.widget-inhibitors > button { + font-size: initial; + color: white; + text-shadow: none; + background: @noti-bg; + border: 3px solid @noti-border-color; + box-shadow: none; + border-radius: 24px; +} +.widget-inhibitors > button:hover { + background: @noti-bg-hover; +} diff --git a/home/dots/wlogout/layout b/home/dots/wlogout/layout new file mode 100644 index 0000000..d916b06 --- /dev/null +++ b/home/dots/wlogout/layout @@ -0,0 +1,24 @@ +{ +"label" : "logout", +"action" : "loginctl terminate-user $USER", +"text" : "Logout", +"keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown", + "keybind" : "d" +} +{ + "label" : "suspend", + "action" : "systemctl suspend", + "text" : "Suspend", + "keybind" : "s" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot", + "keybind" : "r" +} diff --git a/home/dots/wlogout/style.css b/home/dots/wlogout/style.css new file mode 100644 index 0000000..b3f3048 --- /dev/null +++ b/home/dots/wlogout/style.css @@ -0,0 +1,44 @@ +* { + background-image: none; +} +window { + background-color: #181b28; +} +button { + color: #FFFFFF; + background-color: #181b28; + border-style: solid; + border-width: 2px; + background-repeat: no-repeat; + background-position: center; + background-size: 25%; +} + +button:focus, button:active, button:hover { + background-color: #27ae60; + outline-style: none; +} + +#lock { + background-image: image(url("/usr/share/wlogout/icons/lock.png"), url("/usr/local/share/wlogout/icons/lock.png")); +} + +#logout { + background-image: image(url("/usr/share/wlogout/icons/logout.png"), url("/usr/local/share/wlogout/icons/logout.png")); +} + +#suspend { + background-image: image(url("/usr/share/wlogout/icons/suspend.png"), url("/usr/local/share/wlogout/icons/suspend.png")); +} + +#hibernate { + background-image: image(url("/usr/share/wlogout/icons/hibernate.png"), url("/usr/local/share/wlogout/icons/hibernate.png")); +} + +#shutdown { + background-image: image(url("/usr/share/wlogout/icons/shutdown.png"), url("/usr/local/share/wlogout/icons/shutdown.png")); +} + +#reboot { + background-image: image(url("/usr/share/wlogout/icons/reboot.png"), url("/usr/local/share/wlogout/icons/reboot.png")); +} diff --git a/home/home.nix b/home/home.nix index dc5874d..86020a7 100755 --- a/home/home.nix +++ b/home/home.nix @@ -59,7 +59,6 @@ in libsForQt5.qtstyleplugin-kvantum libsForQt5.bismuth - # hackneyed gtk-engine-murrine @@ -72,7 +71,10 @@ in ]; xdg.enable = true; - xdg.systemDirs.data = [ "${pkgs.hackneyed}/share" ]; + xdg.systemDirs.data = [ + "${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}" + "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" + ]; programs.vscode = { enable = true; @@ -121,8 +123,12 @@ in gtk = { enable = true; theme = { - package = pkgs.callPackage ./homepkgs/simplewaita-gtk.nix {}; - name = "simplewaita"; + package = pkgs.sweet; + name = "Sweet-Dark"; + }; + iconTheme = { + package = pkgs.papirus-icon-theme; + name = "Papirus-Dark"; }; }; @@ -387,14 +393,14 @@ fresh programs.helix.enable = true; programs.helix.settings = { - theme = "bogster"; + theme = "noctis"; editor.lsp.display-messages = true; # editor.auto-pairs = false; # editor.indent-guides.render = true; }; home.sessionVariables = { - GTK_THEME = "simplewaita"; + GTK_THEME = "Sweet-Dark"; }; home.stateVersion = "22.11"; diff --git a/home/homepkgs/fuzzel.nix b/home/homepkgs/fuzzel.nix new file mode 100644 index 0000000..9ec4c14 --- /dev/null +++ b/home/homepkgs/fuzzel.nix @@ -0,0 +1,62 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.programs.fuzzel; + iniFormat = pkgs.formats.ini { }; +in { + options = { + programs.fuzzel = { + enable = mkEnableOption "Fuzzel"; + + package = mkOption { + type = types.package; + default = pkgs.fuzzel; + defaultText = literalExpression "pkgs.fuzzel"; + description = "The Fuzzel package to install."; + }; + + settings = mkOption { + type = iniFormat.type; + default = { }; + example = literalExpression '' + { + window.dimensions = { + lines = 3; + columns = 200; + }; + key_bindings = [ + { + key = "K"; + mods = "Control"; + chars = "\\x0c"; + } + ]; + } + ''; + description = '' + Configuration written to + $XDG_CONFIG_HOME/fuzzel/fuzzel.ini. + ''; + }; + }; + }; + + config = mkMerge [ + (mkIf cfg.enable { + home.packages = [ cfg.package ]; + + xdg.configFile."fuzzel/fuzzel.ini" = mkIf (cfg.settings != { }) { + # TODO: Replace by the generate function but need to figure out how to + # handle the escaping first. + # + # source = yamlFormat.generate "alacritty.yml" cfg.settings; + + text = + replaceStrings [ "\\\\" ] [ "\\" ] (builtins.toJSON cfg.settings); + }; + }) + ]; +} + diff --git a/home/homepkgs/swayosd.lock b/home/homepkgs/swayosd.lock new file mode 100644 index 0000000..8d2f4d6 --- /dev/null +++ b/home/homepkgs/swayosd.lock @@ -0,0 +1,826 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" + +[[package]] +name = "atk" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blight" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60c217c718b4093f44e9c26a96f4e4c2fafec37d6f46b33192ad3892d3151eae" +dependencies = [ + "colored", +] + +[[package]] +name = "cairo-rs" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cascade" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d499b43edbf784dd81e16f0395f5b4350a35b477da8a074251087adefc11cb52" + +[[package]] +name = "cfg-expr" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" +dependencies = [ + "smallvec", +] + +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "field-offset" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "futures-channel" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" + +[[package]] +name = "futures-executor" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" + +[[package]] +name = "futures-task" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" + +[[package]] +name = "futures-util" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gio" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-layer-shell" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4316ff523ae445bd6efaf253f217598dd074619fe67b9199b5b0cd5ff99144da" +dependencies = [ + "bitflags", + "gdk", + "glib", + "glib-sys", + "gtk", + "gtk-layer-shell-sys", + "libc", +] + +[[package]] +name = "gtk-layer-shell-sys" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff60230d690445577655416055dbd279d05631b03ab07f935e39f5fe81084c0a" +dependencies = [ + "gdk-sys", + "glib-sys", + "gtk-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "libpulse-binding" +version = "2.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1745b20bfc194ac12ef828f144f0ec2d4a7fe993281fa3567a0bd4969aee6890" +dependencies = [ + "bitflags", + "libc", + "libpulse-sys", + "num-derive", + "num-traits", + "winapi", +] + +[[package]] +name = "libpulse-sys" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2191e6880818d1df4cf72eac8e91dce7a5a52ba0da4b2a5cdafabc22b937eadb" +dependencies = [ + "libc", + "num-derive", + "num-traits", + "pkg-config", + "winapi", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "pango" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +dependencies = [ + "bitflags", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulsectl-rs" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06a988bceed1981b2c5fc4a3da0e4e073fdaff8e6bd022b089f54bc573dc3cfc" +dependencies = [ + "libpulse-binding", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" + +[[package]] +name = "serde" +version = "1.0.157" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" + +[[package]] +name = "shrinkwraprs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e6744142336dfb606fe2b068afa2e1cca1ee6a5d8377277a92945d81fa331" +dependencies = [ + "bitflags", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "swayosd" +version = "0.1.0" +dependencies = [ + "blight", + "cascade", + "gtk", + "gtk-layer-shell", + "libpulse-binding", + "pulsectl-rs", + "shrinkwraprs", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "thiserror" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.2", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" + +[[package]] +name = "toml_edit" +version = "0.19.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" +dependencies = [ + "memchr", +] diff --git a/home/homepkgs/swayosd.nix b/home/homepkgs/swayosd.nix new file mode 100755 index 0000000..0db41ec --- /dev/null +++ b/home/homepkgs/swayosd.nix @@ -0,0 +1,24 @@ +{ lib, fetchFromGitHub, rustPlatform, pkg-config, gtk3, gtk-layer-shell, libpulseaudio }: + +rustPlatform.buildRustPackage rec { + pname = "SwayOSD"; + version = "0.1.0"; + + src = fetchFromGitHub { + owner = "ErikReider"; + repo = pname; + rev = "9f294d8f4713eb210e9aad3dee83de32090e4784"; + sha256 = "sha256-3K8LlX4MrG523BwD4nZOcXgSxsnYRxxU5gCOp7rCOCY="; + }; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ gtk3 gtk-layer-shell libpulseaudio ]; + cargoLock.lockFileContents = builtins.readFile ./swayosd.lock; + postPatch = '' + cp ${./swayosd.lock} Cargo.lock + ''; + + cargoSha256 = lib.fakeSha256; + + +} diff --git a/style.css b/style.css new file mode 100644 index 0000000..4f5607a --- /dev/null +++ b/style.css @@ -0,0 +1,44 @@ +* { + background-image: none; +} +window { + background-color: #181b28; +} +button { + color: #FFFFFF; + background-color: #181b28; + border-style: solid; + border-width: 2px; + background-repeat: no-repeat; + background-position: center; + background-size: 25%; +} + +button:focus, button:active, button:hover { + background-color: #27ae60; + outline-style: none; +} + +#lock { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/lock.png"), url("/usr/local/share/wlogout/icons/lock.png")); +} + +#logout { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/logout.png"), url("/usr/local/share/wlogout/icons/logout.png")); +} + +#suspend { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/suspend.png"), url("/usr/local/share/wlogout/icons/suspend.png")); +} + +#hibernate { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/hibernate.png"), url("/usr/local/share/wlogout/icons/hibernate.png")); +} + +#shutdown { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/shutdown.png"), url("/usr/local/share/wlogout/icons/shutdown.png")); +} + +#reboot { + background-image: image(url("pkgs.wlogout/share/wlogout/icons/reboot.png"), url("/usr/local/share/wlogout/icons/reboot.png")); +} diff --git a/system/configuration.nix b/system/configuration.nix index 8c51a3f..77d2f7d 100755 --- a/system/configuration.nix +++ b/system/configuration.nix @@ -133,7 +133,8 @@ # gtk compatibility qt.enable = true; - qt.platformTheme = "kde"; + qt.style = "kvantum"; + qt.platformTheme = "qt5ct"; programs.zsh.enable = true; users.defaultUserShell = pkgs.zsh; @@ -164,13 +165,9 @@ river - # hackneyed - + ]; - nixpkgs.config.permittedInsecurePackages = [ - "imagemagick-6.9.12-68" - ]; networking.wg-quick.interfaces = { mullvad = { address = [ "10.66.224.186/32" ]; @@ -205,6 +202,11 @@ }; }; + security.pam.services.waylock = { + text ='' + auth include login + ''; + }; system.stateVersion = "22.05"; # Did you read the comment? diff --git a/system/quiver.nix b/system/quiver.nix index 682d6ee..f821834 100755 --- a/system/quiver.nix +++ b/system/quiver.nix @@ -61,6 +61,7 @@ in { enable = true; xwayland = { enable = true; + hidpi = false; }; nvidiaPatches = true; }; @@ -126,6 +127,7 @@ in { }; extraPortals = with pkgs; [ xdg-desktop-portal-kde + xdg-desktop-portal-gtk ]; };