it finally happened
This commit is contained in:
parent
2ea78bdd47
commit
56d55e1659
190 changed files with 843 additions and 9368 deletions
117
home/bolt.nix
Executable file → Normal file
117
home/bolt.nix
Executable file → Normal file
|
@ -1,111 +1,10 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
flake-compat = builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
|
||||
|
||||
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
|
||||
];
|
||||
|
||||
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 {};
|
||||
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; [
|
||||
zellij
|
||||
xonotic
|
||||
nicotine-plus
|
||||
glib # for gsettings
|
||||
fuzzel
|
||||
grim
|
||||
slurp
|
||||
swaybg
|
||||
wlogout
|
||||
wf-recorder
|
||||
libnotify
|
||||
xorg.xrdb
|
||||
swayidle
|
||||
swaynotificationcenter
|
||||
swayosd
|
||||
waylock
|
||||
playerctl
|
||||
];
|
||||
|
||||
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;
|
||||
xwayland = {
|
||||
enable = true;
|
||||
hidpi = false;
|
||||
};
|
||||
recommendedEnvironment = true;
|
||||
extraConfig = builtins.readFile dots/hyprland/hyprland.conf;
|
||||
};
|
||||
|
||||
systemd.user.startServices = true;
|
||||
systemd.user.services."com.system76.Scheduler.dbusproxy" = {
|
||||
Unit = {
|
||||
Description = "the system76 process scheduler kwin dbus proxy";
|
||||
Requires = [ "dbus.service" ];
|
||||
};
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" "default.target" ];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = ''${pkgs.kwin-system76-scheduler-integration}/bin/kwin-system76-scheduler-dbus-proxy.sh'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services."hyprland-system76" = {
|
||||
Unit = {
|
||||
Description = "the hyprland process scheduler hook";
|
||||
Requires = [ "dbus.service" ];
|
||||
};
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" "default.target" ];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = ''${pkgs.hyprland-s76}/bin/hyprland-system76-scheduler-hook.sh'';
|
||||
};
|
||||
};
|
||||
{ inputs, outputs, lib, config, pkgs, ... }: {
|
||||
imports = [
|
||||
./home.nix
|
||||
];
|
||||
|
||||
home = {
|
||||
username = "bolt";
|
||||
homeDirectory = "/home/bolt";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
{ allowUnfree = true; }
|
37
home/dots/Xresources
Normal file
37
home/dots/Xresources
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
! special
|
||||
*.foreground: #d3dae3
|
||||
*.background: #181b28
|
||||
*.cursorColor: #d3dae3
|
||||
|
||||
! black
|
||||
*.color0: #2f343f
|
||||
*.color8: #1e2233
|
||||
|
||||
! red
|
||||
*.color1: #ed244e
|
||||
*.color9: #da4453
|
||||
|
||||
! green
|
||||
*.color2: #27ae60
|
||||
*.color10: #71f79f
|
||||
|
||||
! yellow
|
||||
*.color3: #f67400
|
||||
*.color11: #fdbc4b
|
||||
|
||||
! blue
|
||||
*.color4: #2980b9
|
||||
*.color12: #1d99f3
|
||||
|
||||
! magenta
|
||||
*.color5: #c50ed2
|
||||
*.color13: #9b59b6
|
||||
|
||||
! cyan
|
||||
*.color6: #3daee9
|
||||
*.color14: #5294e2
|
||||
|
||||
! white
|
||||
*.color7: #a1a9b1
|
||||
*.color15: #656a73
|
33
home/dots/eww/colors.scss
Normal file
33
home/dots/eww/colors.scss
Normal file
|
@ -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;
|
17
home/dots/fuzzel/fuzzel.ini
Normal file
17
home/dots/fuzzel/fuzzel.ini
Normal file
|
@ -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"
|
131
home/dots/hyprland/hyprland.conf
Normal file
131
home/dots/hyprland/hyprland.conf
Normal file
|
@ -0,0 +1,131 @@
|
|||
exec-once = eww open bar
|
||||
exec-once = swayidle -w timeout 300 'waylock'
|
||||
exec-once = swayidle -w timeout 600 'systemctl suspend' after-resume '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=15
|
||||
gaps_out=25
|
||||
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
|
||||
|
62
home/dots/swaync/config.json
Normal file
62
home/dots/swaync/config.json
Normal file
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
523
home/dots/swaync/configSchema.json
Normal file
523
home/dots/swaync/configSchema.json
Normal file
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
348
home/dots/swaync/style.css
Normal file
348
home/dots/swaync/style.css
Normal file
|
@ -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;
|
||||
}
|
36
home/dots/wlogout/layout
Normal file
36
home/dots/wlogout/layout
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"label" : "lock",
|
||||
"action" : "waylock",
|
||||
"text" : "Lock",
|
||||
"keybind" : "l"
|
||||
}
|
||||
{
|
||||
"label" : "logout",
|
||||
"action" : "loginctl terminate-user $USER",
|
||||
"text" : "Logout",
|
||||
"keybind" : "e"
|
||||
}
|
||||
{
|
||||
"label" : "suspend",
|
||||
"action" : "systemctl suspend",
|
||||
"text" : "Suspend",
|
||||
"keybind" : "s"
|
||||
}
|
||||
{
|
||||
"label" : "shutdown",
|
||||
"action" : "systemctl poweroff",
|
||||
"text" : "Shutdown",
|
||||
"keybind" : "d"
|
||||
}
|
||||
{
|
||||
"label" : "reboot",
|
||||
"action" : "systemctl reboot",
|
||||
"text" : "Reboot",
|
||||
"keybind" : "r"
|
||||
}
|
||||
{
|
||||
"label" : "hibernate",
|
||||
"action" : "systemctl hibernate",
|
||||
"text" : "Hibernate",
|
||||
"keybind" : "h"
|
||||
}
|
44
home/dots/wlogout/style.css
Normal file
44
home/dots/wlogout/style.css
Normal file
|
@ -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"));
|
||||
}
|
42
home/dots/zsh
Normal file
42
home/dots/zsh
Normal file
|
@ -0,0 +1,42 @@
|
|||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
||||
|
||||
la_culr()
|
||||
{
|
||||
ls -lha --group-directories-first --color $@ | culr
|
||||
}
|
||||
|
||||
ls_culr()
|
||||
{
|
||||
ls -lh --group-directories-first --color $@ | culr
|
||||
}
|
||||
|
||||
ps_culr()
|
||||
{
|
||||
ps ww$@ | culr
|
||||
}
|
||||
|
||||
alias ...=\"cd ../..\"
|
||||
alias ....=\"cd ../../..\"
|
||||
alias .....=\"cd ../../../..\"
|
||||
|
||||
alias fresh=\"clear; echo; ~/.nix/header.sh\"
|
||||
alias icat=\"kitty +kitten icat\"
|
||||
alias chmox=\"chmod +x\"
|
||||
alias gs=\"git status\"
|
||||
alias gcl=\"git clone\"
|
||||
alias ga=\"git add\"
|
||||
alias gcb=\"git checkout -b\"
|
||||
alias gco=\"git checkout\"
|
||||
alias gl=\"git pull\"
|
||||
alias gp=\"git push\"
|
||||
alias gd=\"git diff\"
|
||||
alias gcam=\"git commit -am\"
|
||||
alias gcm=\"git commit -m\"
|
||||
alias gr=\"git restore\"
|
||||
alias gm=\"git merge\"
|
||||
alias l=\"ls_culr\"
|
||||
alias la=\"la_culr\"
|
||||
alias p=\"ps_culr\"
|
||||
alias mnt=\"mount | column -t | culr\"
|
||||
alias kaboom=\"printf 'type any input if you wish to update\n\npress enter to continue\n'; read upgrade; if [ -n \\\"\\\$upgrade\\\" ]; then echo upgrading..; sudo nix-channel --update; else echo no upgrade!; fi; sudo nixos-rebuild switch -j9 && rm ~/.gtkrc-2.0; home-manager switch && sudo nix-collect-garbage && nix-store --optimise\"
|
||||
fresh
|
|
@ -1,16 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
home.username = "fossil";
|
||||
home.homeDirectory = "/home/fossil";
|
||||
|
||||
home.packages = with pkgs; [
|
||||
cmus
|
||||
zellij
|
||||
steam
|
||||
xonotic
|
||||
nicotine-plus
|
||||
];
|
||||
|
||||
}
|
352
home/home.nix
Executable file → Normal file
352
home/home.nix
Executable file → Normal file
|
@ -1,36 +1,36 @@
|
|||
{ pkgs, config, ... }:
|
||||
{ inputs, outputs, lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
# nix-rice = builtins.fetchGit {
|
||||
# url = "https://github.com/bertof/nix-rice.git";
|
||||
# rev = "ac810023c1bb3d999ab4295ea4eb261412f4b7c0";
|
||||
# };
|
||||
# nix-rice-overlay = import (nix-rice + "/overlay.nix");
|
||||
# pkgs = import <nixpkgs> { overlays = [ nix-rice-overlay ]; };
|
||||
# kitty_notest = pkgs.kitty.overridePythonAttrs (oldAttrs: { doCheck = false; checkPhase = ""; });
|
||||
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 = [
|
||||
# who are you?
|
||||
./bolt.nix
|
||||
# ./fossil.nix
|
||||
# ./plank.nix
|
||||
];
|
||||
|
||||
nixpkgs.config.packageOverrides = pkgs: {
|
||||
nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
|
||||
inherit pkgs;
|
||||
};
|
||||
};
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nixpkgs.config.permittedInsecurePackages = [
|
||||
"imagemagick-6.9.12-68"
|
||||
];
|
||||
imports = [
|
||||
inputs.hyprland.homeManagerModules.default
|
||||
./programs/eww/default.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
|
||||
nixpkgs = {
|
||||
overlays = [
|
||||
outputs.overlays.additions
|
||||
outputs.overlays.unstable-pkgs
|
||||
];
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = (_: true);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
home.stateVersion = "22.11";
|
||||
|
||||
home.packages = with pkgs; [
|
||||
thunderbird
|
||||
|
||||
clementine
|
||||
inkscape
|
||||
|
||||
|
@ -41,9 +41,9 @@ in
|
|||
fd
|
||||
lazygit
|
||||
fzf
|
||||
zoxide
|
||||
zellij
|
||||
glib # for gsettings
|
||||
fuzzel
|
||||
grim
|
||||
slurp
|
||||
swaybg
|
||||
|
@ -53,81 +53,86 @@ in
|
|||
xorg.xrdb
|
||||
swayidle
|
||||
swaynotificationcenter
|
||||
swayosd
|
||||
waylock
|
||||
playerctl
|
||||
|
||||
culr
|
||||
swayosd
|
||||
fuzzel
|
||||
|
||||
kdeconnect
|
||||
syncthing
|
||||
keepassxc
|
||||
git-credential-keepassxc
|
||||
|
||||
direnv
|
||||
|
||||
mpv
|
||||
syncthing
|
||||
|
||||
zoxide
|
||||
meslo-lgs-nf
|
||||
|
||||
# libreoffice-qt
|
||||
libsForQt5.qtstyleplugin-kvantum
|
||||
|
||||
gtk-engine-murrine
|
||||
];
|
||||
|
||||
(callPackage ./homepkgs/git-credential-keepassxc.nix { })
|
||||
(callPackage ./homepkgs/culr.nix { })
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
];
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemdIntegration = true;
|
||||
nvidiaPatches = true;
|
||||
xwayland = {
|
||||
enable = true;
|
||||
hidpi = false;
|
||||
};
|
||||
recommendedEnvironment = true;
|
||||
extraConfig = builtins.readFile dots/hyprland/hyprland.conf;
|
||||
};
|
||||
|
||||
programs.eww-hyprland = {
|
||||
enable = true;
|
||||
colors = builtins.readFile dots/eww/colors.scss;
|
||||
};
|
||||
|
||||
systemd.user.startServices = "sd-switch";
|
||||
systemd.user.services."hyprland-system76" = {
|
||||
Unit = {
|
||||
Description = "the hyprland process scheduler hook";
|
||||
Requires = [ "dbus.service" ];
|
||||
};
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" "default.target" ];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = ''${pkgs.hyprland-system76-scheduler-integration}/bin/hyprland-system76-scheduler-hook.sh'';
|
||||
};
|
||||
};
|
||||
|
||||
xresources.extraConfig = builtins.readFile ./dots/Xresources;
|
||||
|
||||
xdg.enable = 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;
|
||||
};
|
||||
|
||||
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;
|
||||
# enableExtensionUpdateCheck = false;
|
||||
# enableUpdateCheck = false;
|
||||
extensions = [];
|
||||
mutableExtensionsDir = true;
|
||||
home.sessionVariables = {
|
||||
GTK_THEME = "Sweet-Dark";
|
||||
};
|
||||
|
||||
xdg.desktopEntries = {
|
||||
Code-url = {
|
||||
name = "VsCode";
|
||||
genericName = "Text Editor";
|
||||
exec = "code --disable-gpu-sandbox --open-url %U";
|
||||
icon = "code";
|
||||
comment = "Code Editing. Redefined.";
|
||||
categories = [ "Utility" "TextEditor" "Development" "IDE" ];
|
||||
# keywords = [ "vscode" ];
|
||||
mimeType = [ "x-scheme-handler/vscode" ];
|
||||
noDisplay = true;
|
||||
startupNotify = true;
|
||||
type = "Application";
|
||||
};
|
||||
Code = {
|
||||
categories = [ "Utility" "TextEditor" "Development" "IDE" ];
|
||||
comment = "Code Editing. Redefined.";
|
||||
exec = "code --disable-gpu-sandbox %F";
|
||||
genericName = "Text Editor";
|
||||
icon = "code";
|
||||
# keywords = [ "vscode" ];
|
||||
mimeType = [ "text/plain" "inode/directory" ];
|
||||
name = "VsCode";
|
||||
startupNotify = true;
|
||||
# startupWMClass = "vsCode";
|
||||
type = "Application";
|
||||
};
|
||||
};
|
||||
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
|
@ -140,43 +145,39 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
programs.firefox =
|
||||
{
|
||||
package = pkgs.firefox.override {
|
||||
cfg = {
|
||||
enablePlasmaBrowserIntegration = true;
|
||||
};
|
||||
};
|
||||
enable = true;
|
||||
profiles.default = {
|
||||
id = 0;
|
||||
name = "Default";
|
||||
settings = {
|
||||
"browser.startup.homepage" = "about:blank";
|
||||
};
|
||||
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
vimium-c
|
||||
darkreader
|
||||
localcdn
|
||||
ublock-origin
|
||||
# bypass-paywalls-clean
|
||||
# sidebery
|
||||
plasma-integration
|
||||
keepassxc-browser
|
||||
user-agent-string-switcher
|
||||
# happy-bonobo-disable-webrtc
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services.syncthing = {
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.firefox =
|
||||
{
|
||||
enable = true;
|
||||
profiles.default = {
|
||||
id = 0;
|
||||
name = "Default";
|
||||
settings = {
|
||||
"browser.startup.homepage" = "about:blank";
|
||||
};
|
||||
extensions = with config.nur.repos.rycee.firefox-addons; [
|
||||
vimium-c
|
||||
darkreader
|
||||
localcdn
|
||||
ublock-origin
|
||||
plasma-integration
|
||||
keepassxc-browser
|
||||
user-agent-string-switcher
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# services.kdeconnect = {
|
||||
# enable = true;
|
||||
# indicator = true;
|
||||
# };
|
||||
programs.helix.enable = true;
|
||||
programs.helix.settings = {
|
||||
theme = "gruvbox_dark_hard";
|
||||
editor.lsp.display-messages = true;
|
||||
};
|
||||
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
|
@ -218,29 +219,9 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
# colors = {
|
||||
# fg = "#d3dae3";
|
||||
# "fg+" = "#d3dae3";
|
||||
# bg = "#060604";
|
||||
# "bg+" = "#060604";
|
||||
# preview-fg = "#fdbc4b";
|
||||
# preview-bg = "#1e2233";
|
||||
# hl = "#da4453";
|
||||
# "hl+" = "#ed244e";
|
||||
# info = "#fdbc4b";
|
||||
# border = "#656a73";
|
||||
# prompt = "#c50ed2";
|
||||
# pointer = "#27ae60";
|
||||
# header = "#da4453";
|
||||
# };
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
|
@ -251,51 +232,7 @@ in
|
|||
enableVteIntegration = true;
|
||||
autocd = true;
|
||||
defaultKeymap = "viins";
|
||||
initExtra = "
|
||||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
||||
|
||||
la_culr()
|
||||
{
|
||||
ls -lha --group-directories-first --color $@ | culr
|
||||
}
|
||||
|
||||
ls_culr()
|
||||
{
|
||||
ls -lh --group-directories-first --color $@ | culr
|
||||
}
|
||||
|
||||
ps_culr()
|
||||
{
|
||||
ps ww$@ | culr
|
||||
}
|
||||
|
||||
alias ...=\"cd ../..\"
|
||||
alias ....=\"cd ../../..\"
|
||||
alias .....=\"cd ../../../..\"
|
||||
|
||||
alias fresh=\"clear; echo; ~/.nix/header.sh\"
|
||||
alias icat=\"kitty +kitten icat\"
|
||||
alias chmox=\"chmod +x\"
|
||||
alias gs=\"git status\"
|
||||
alias gcl=\"git clone\"
|
||||
alias ga=\"git add\"
|
||||
alias gcb=\"git checkout -b\"
|
||||
alias gco=\"git checkout\"
|
||||
alias gl=\"git pull\"
|
||||
alias gp=\"git push\"
|
||||
alias gd=\"git diff\"
|
||||
alias gcam=\"git commit -am\"
|
||||
alias gcm=\"git commit -m\"
|
||||
alias gr=\"git restore\"
|
||||
alias gm=\"git merge\"
|
||||
alias l=\"ls_culr\"
|
||||
alias la=\"la_culr\"
|
||||
alias p=\"ps_culr\"
|
||||
alias mnt=\"mount | column -t | culr\"
|
||||
alias kaboom=\"printf 'type any input if you wish to update\n\npress enter to continue\n'; read upgrade; if [ -n \\\"\\\$upgrade\\\" ]; then echo upgrading..; sudo nix-channel --update; else echo no upgrade!; fi; sudo nixos-rebuild switch -j9 && rm ~/.gtkrc-2.0; home-manager switch && sudo nix-collect-garbage && nix-store --optimise\"
|
||||
fresh
|
||||
";
|
||||
|
||||
initExtra = builtins.readFile ./dots/zsh;
|
||||
plugins = [
|
||||
{
|
||||
name = "powerlevel10k";
|
||||
|
@ -322,11 +259,6 @@ fresh
|
|||
src = pkgs.zsh-command-time;
|
||||
file = "share/zsh-completions/zsh-command-time.zsh";
|
||||
}
|
||||
# {
|
||||
# name = "zsh-you-should-use";
|
||||
# src = pkgs.zsh-you-should-use;
|
||||
# # file = "share/zsh-completions/zsh-you-should-use.zsh";
|
||||
# }
|
||||
{
|
||||
name = "zsh-autocomplete";
|
||||
src = pkgs.zsh-autocomplete;
|
||||
|
@ -352,66 +284,8 @@ fresh
|
|||
src = pkgs.nix-zsh-completions;
|
||||
file = "share/nix-zsh-completions/nix-zsh-completions.zsh";
|
||||
}
|
||||
# {
|
||||
# name = "zsh-fzf-tab";
|
||||
# src = pkgs.zsh-fzf-tab;
|
||||
# # file = "share/zsh-fzf-tab/zsh-fzf-tab.zsh";
|
||||
# }
|
||||
];
|
||||
};
|
||||
|
||||
xresources.extraConfig = "
|
||||
! special
|
||||
*.foreground: #d3dae3
|
||||
*.background: #181b28
|
||||
*.cursorColor: #d3dae3
|
||||
|
||||
! black
|
||||
*.color0: #2f343f
|
||||
*.color8: #1e2233
|
||||
|
||||
! red
|
||||
*.color1: #ed244e
|
||||
*.color9: #da4453
|
||||
|
||||
! green
|
||||
*.color2: #27ae60
|
||||
*.color10: #71f79f
|
||||
|
||||
! yellow
|
||||
*.color3: #f67400
|
||||
*.color11: #fdbc4b
|
||||
|
||||
! blue
|
||||
*.color4: #2980b9
|
||||
*.color12: #1d99f3
|
||||
|
||||
! magenta
|
||||
*.color5: #c50ed2
|
||||
*.color13: #9b59b6
|
||||
|
||||
! cyan
|
||||
*.color6: #3daee9
|
||||
*.color14: #5294e2
|
||||
|
||||
! white
|
||||
*.color7: #a1a9b1
|
||||
*.color15: #656a73";
|
||||
|
||||
programs.helix.enable = true;
|
||||
programs.helix.settings = {
|
||||
theme = "noctis";
|
||||
editor.lsp.display-messages = true;
|
||||
# editor.auto-pairs = false;
|
||||
# editor.indent-guides.render = true;
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
GTK_THEME = "Sweet-Dark";
|
||||
};
|
||||
|
||||
home.stateVersion = "22.11";
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
{ lib
|
||||
, mkDerivation
|
||||
, fetchFromGitHub
|
||||
, kcoreaddons
|
||||
, kwindowsystem
|
||||
, plasma-framework
|
||||
, systemsettings
|
||||
, cmake
|
||||
, extra-cmake-modules
|
||||
, esbuild
|
||||
}:
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "bismuth";
|
||||
version = "3.1.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Bismuth-Forge";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-IWwFsYqoqW3924+pf8L+acIt31aU/mhqakXbT9Q4Bqw=";
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
"-DUSE_TSC=OFF"
|
||||
"-DUSE_NPM=OFF"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
extra-cmake-modules
|
||||
esbuild
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
kcoreaddons
|
||||
kwindowsystem
|
||||
plasma-framework
|
||||
systemsettings
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "A dynamic tiling extension for KWin";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ pasqui23 ];
|
||||
homepage = "https://bismuth-forge.github.io/bismuth/";
|
||||
inherit (kwindowsystem.meta) platforms;
|
||||
};
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
{ lib, fetchFromGitea, rustPlatform, libX11, pkg-config }:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "culr";
|
||||
version = "0.1.0";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "git.atagen.co";
|
||||
owner = "atagen";
|
||||
repo = pname;
|
||||
rev = "8cb1323bdc388ce1fdb0675ade756ea8b59b803d";
|
||||
sha256 = "sha256-Blo1PyhzKU4LzflmeGrvWOQEon2BCTkF3uQR+7D5/kc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ libX11 ];
|
||||
|
||||
cargoSha256 = "sha256-Vnhni8tckrexlJ85gfSDEAVWhH6oVHn9/z2O2OIVR5o=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "colourise piped input";
|
||||
homepage = "https://git.atagen.co/atagen/culr";
|
||||
license = licenses.mit;
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
{ 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
|
||||
<filename>$XDG_CONFIG_HOME/fuzzel/fuzzel.ini</filename>.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
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);
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
{ lib, fetchFromGitHub, rustPlatform }:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "git-credential-keepassxc";
|
||||
version = "0.10.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "frederick888";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-BmjGxDqX8j/69Uo8jjWtcJcxNHxI7S5+eZQMApdybq0=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-gXW08plJRE1Q6W+Dc2y+gu2R+KBRs3fBG1umdawDduA=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Helper that allows Git (and shell scripts) to use KeePassXC as credential store";
|
||||
homepage = "https://github.com/frederick888/git-credential-keepassxc";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, wlroots, wayland, wayland-protocols
|
||||
, libX11, libGL }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "glpaper";
|
||||
version = "unstable-latest";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~scoopta";
|
||||
repo = pname;
|
||||
vc = "hg";
|
||||
rev = "9ba3806561312d83ed66dc8583c36d70fda8cd7a";
|
||||
sha256 = "sha256-//IKW2BfpqwcR2WAPShs0kzn5nkV/yyABPvOYm3zMPU=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson ninja pkg-config ];
|
||||
buildInputs = [
|
||||
wayland
|
||||
libX11 # required by libglvnd
|
||||
libGL
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description =
|
||||
"Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper";
|
||||
homepage = "https://hg.sr.ht/~scoopta/glpaper";
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ ccellado ];
|
||||
};
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
{ stdenvNoCC, lib, fetchFromGitea, }:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "Simplewaita";
|
||||
version = "0.1.0";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "git.disroot.org";
|
||||
owner = "eudaimon";
|
||||
repo = pname;
|
||||
rev = "16c5f75fd3e03671c3998dcb9a67e3ff6da5a538";
|
||||
hash = "sha256-VvPQGsdikfIi3VG5Mh8FcioTVwXaxKxaSf2X+yWJckA=";
|
||||
};
|
||||
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r ./ $out
|
||||
'';
|
||||
dontBuild = true;
|
||||
dontFixup = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A mix of Skewaita and Simple. Or, more precisely: Skewaita Simple-ified.";
|
||||
homepage = "https://git.disroot.org/eudaimon/Simplewaita";
|
||||
license = licenses.gpl1Only;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -1,826 +0,0 @@
|
|||
# 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",
|
||||
]
|
|
@ -1,24 +0,0 @@
|
|||
{ 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;
|
||||
|
||||
|
||||
}
|
10
home/overlay.nix
Normal file
10
home/overlay.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
inputs: _: prev: {
|
||||
hyprland-s76 = prev.callPackage ./hyprland-system76-scheduler-integration.nix {};
|
||||
swayosd = prev.callPackage ./homepkgs/swayosd.nix {};
|
||||
wlogout_style_base = dots/wlogout/style.css;
|
||||
wlogout_style = prev.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
|
||||
'';
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
kwin-system76-scheduler-integration = pkgs.libsForQt5.callPackage ../system/syspkgs/kwin-system76-scheduler-integration.nix {};
|
||||
})
|
||||
];
|
||||
|
||||
home.username = "plank";
|
||||
home.homeDirectory = "/home/plank";
|
||||
|
||||
systemd.user.startServices = true;
|
||||
systemd.user.services."com.system76.Scheduler.dbusproxy" = {
|
||||
|
||||
Unit = {
|
||||
Description = "the system76 process scheduler kwin dbus proxy";
|
||||
Requires = [ "dbus.service" ];
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" "default.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = ''${pkgs.kwin-system76-scheduler-integration}/bin/kwin-system76-scheduler-dbus-proxy.sh'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
68
home/programs/eww/README.md
Normal file
68
home/programs/eww/README.md
Normal file
|
@ -0,0 +1,68 @@
|
|||
# Eww configuration
|
||||
|
||||
This configuration aims to provide a fully working shell replacement for
|
||||
compositors/window managers. Features constantly get added and existing ones
|
||||
get improved.
|
||||
|
||||
## 🗃️ Components
|
||||
|
||||
The same daemon runs multiple windows which interact with each other:
|
||||
|
||||
### bar
|
||||
|
||||

|
||||
|
||||
### music window
|
||||
|
||||

|
||||
|
||||
### calendar
|
||||
|
||||

|
||||
|
||||
### system info
|
||||
|
||||

|
||||
|
||||
## ❔ Usage
|
||||
|
||||
### Home Manager
|
||||
|
||||
If you use Home Manager, installing is as simple as adding my flake to your
|
||||
inputs, passing `inputs` to `extraSpecialArgs` and importing the relevant
|
||||
module:
|
||||
```nix
|
||||
{inputs, ...}: {
|
||||
imports = [inputs.fufexan.homeManagerModules.eww-hyprland];
|
||||
|
||||
programs.eww-hyprland = {
|
||||
enable = true;
|
||||
|
||||
# default package
|
||||
package = pkgs.eww-wayland;
|
||||
|
||||
# if you want to change colors
|
||||
colors = builtins.readFile ./macchiato.scss;
|
||||
|
||||
# set to true to reload on change
|
||||
autoReload = false;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Make sure to also add the fonts listed below.
|
||||
|
||||
### Other distros
|
||||
|
||||
To quickly install this config, grab all the files in this directory and put
|
||||
them in `~/.config/eww`. Then run `eww daemon` and `eww open bar`. Enjoy!
|
||||
|
||||
Dependencies:
|
||||
- Icon fonts: `material-symbols-outline` (any variation can be used as long as you change the `font-family` property of `.icon`)
|
||||
- Text font: [Jost](https://fonts.google.com/specimen/Jost)
|
||||
- Script deps: everything in `default.nix`'s `dependencies` list.
|
||||
|
||||
## 🎨 Theme
|
||||
|
||||
The theme colors can be changed in `css/_colors.scss`. Currently the theme used
|
||||
is [Catppuccin Mocha](https://github.com/catppuccin/catppuccin).
|
31
home/programs/eww/css/_calendar.scss
Normal file
31
home/programs/eww/css/_calendar.scss
Normal file
|
@ -0,0 +1,31 @@
|
|||
.calendar-win {
|
||||
@include window;
|
||||
background-color: $bg;
|
||||
color: $fg;
|
||||
padding: .2em;
|
||||
}
|
||||
|
||||
calendar {
|
||||
padding: 5px;
|
||||
|
||||
:selected {
|
||||
color: $magenta;
|
||||
}
|
||||
|
||||
.header {
|
||||
color: $black;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
color: $red;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.button {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
:indeterminate {
|
||||
color: $green;
|
||||
}
|
||||
}
|
35
home/programs/eww/css/_colors.scss
Normal file
35
home/programs/eww/css/_colors.scss
Normal file
|
@ -0,0 +1,35 @@
|
|||
$rosewater: #f5e0dc;
|
||||
$flamingo: #f2cdcd;
|
||||
$pink: #f5c2e7;
|
||||
$mauve: #cba6f7;
|
||||
$red: #f38ba8;
|
||||
$maroon: #eba0ac;
|
||||
$peach: #fab387;
|
||||
$yellow: #f9e2af;
|
||||
$green: #a6e3a1;
|
||||
$teal: #94e2d5;
|
||||
$sky: #89dceb;
|
||||
$sapphire: #74c7ec;
|
||||
$blue: #89b4fa;
|
||||
$lavender: #b4befe;
|
||||
|
||||
$text: #cdd6f4;
|
||||
$subtext1: #bac2de;
|
||||
$subtext0: #a6adc8;
|
||||
$overlay2: #9399b2;
|
||||
$overlay1: #7f849c;
|
||||
$overlay0: #6c7086;
|
||||
|
||||
$surface2: #585b70;
|
||||
$surface1: #45475a;
|
||||
$surface0: #313244;
|
||||
|
||||
$base: #1e1e2e;
|
||||
$mantle: #181825;
|
||||
$crust: #11111b;
|
||||
|
||||
$fg: $text;
|
||||
$bg: rgba(30, 30, 46, 0.6);
|
||||
$bg1: rgba(49, 50, 68, 0.6);
|
||||
$border: #28283d;
|
||||
$shadow: $crust;
|
66
home/programs/eww/css/_music.scss
Normal file
66
home/programs/eww/css/_music.scss
Normal file
|
@ -0,0 +1,66 @@
|
|||
.song-cover-art {
|
||||
@include rounding;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
margin: 4px 5px 4px 0;
|
||||
min-height: 24px;
|
||||
min-width: 24px;
|
||||
}
|
||||
|
||||
.music-window {
|
||||
@include window;
|
||||
background-color: $bg;
|
||||
border: 1px solid $border;
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.music-cover-art {
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
border-radius: 8px;
|
||||
margin: 1em;
|
||||
min-height: 170px;
|
||||
min-width: 170px;
|
||||
}
|
||||
|
||||
.music-box {
|
||||
margin: 1rem 1rem 1rem 0;
|
||||
}
|
||||
|
||||
.music-title {
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.music-artist {
|
||||
color: $white_a;
|
||||
}
|
||||
|
||||
.music-button label {
|
||||
color: $white_a;
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.music-time {
|
||||
color: $white_a;
|
||||
margin: 0 1rem;
|
||||
}
|
||||
|
||||
.music-bar scale {
|
||||
highlight {
|
||||
background-image: linear-gradient(to right, $cyan, $blue_a);
|
||||
border-radius: 24px;
|
||||
}
|
||||
|
||||
trough {
|
||||
background-color: $bg1;
|
||||
border-radius: 24px;
|
||||
margin-top: 0;
|
||||
min-height: 10px;
|
||||
min-width: 170px;
|
||||
}
|
||||
}
|
||||
|
||||
.playctl {
|
||||
color: $yellow;
|
||||
}
|
36
home/programs/eww/css/_osd.scss
Normal file
36
home/programs/eww/css/_osd.scss
Normal file
|
@ -0,0 +1,36 @@
|
|||
.osd-part {
|
||||
@include window;
|
||||
background: $bg;
|
||||
margin: 0 .5rem .5rem;
|
||||
|
||||
label {
|
||||
color: $text;
|
||||
font-size: 2rem;
|
||||
margin: 0 .1rem 0 .2rem;
|
||||
}
|
||||
|
||||
scale {
|
||||
margin: -.2rem 0;
|
||||
}
|
||||
|
||||
trough {
|
||||
@include rounding;
|
||||
background-color: $bg1;
|
||||
margin: 1rem 0 .5rem;
|
||||
min-height: 10rem;
|
||||
min-width: .7rem;
|
||||
|
||||
highlight {
|
||||
@include rounding;
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.osd-volume highlight {
|
||||
background-image: linear-gradient(to top, $cyan, $blue_a);
|
||||
}
|
||||
|
||||
.osd-brightness highlight {
|
||||
background-image: linear-gradient(to top, $yellow, $yellow_a);
|
||||
}
|
127
home/programs/eww/css/_sidebar.scss
Normal file
127
home/programs/eww/css/_sidebar.scss
Normal file
|
@ -0,0 +1,127 @@
|
|||
.system-menu-box {
|
||||
@include window;
|
||||
background-color: $bg;
|
||||
color: $text;
|
||||
}
|
||||
|
||||
.separator {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.top-row {
|
||||
margin: 1rem 1.5rem 0;
|
||||
|
||||
.time { font-size: 2rem; }
|
||||
|
||||
.date-box {
|
||||
margin: 0 1rem;
|
||||
|
||||
label { font-size: 1.1rem; }
|
||||
|
||||
.date {
|
||||
background: unset;
|
||||
margin: 0 .5rem 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.system-row {
|
||||
margin: .5rem .7rem;
|
||||
|
||||
.airplane-box button {
|
||||
padding: 1rem 3rem;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 1rem;
|
||||
margin: 0 .1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.element {
|
||||
@include rounding;
|
||||
background-color: $black;
|
||||
margin: .3rem;
|
||||
|
||||
button {
|
||||
@include rounding;
|
||||
padding: 1rem;
|
||||
|
||||
label {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $cyan_a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sliders {
|
||||
@include rounding;
|
||||
background-color: $black;
|
||||
margin: .5rem 1rem;
|
||||
padding: .6rem 1rem;
|
||||
|
||||
scale {
|
||||
margin-right: -1rem;
|
||||
min-width: 21.5rem;
|
||||
|
||||
trough { margin-right: 0; }
|
||||
}
|
||||
|
||||
box { margin: .2rem 0; }
|
||||
label { font-size: 1.2rem; }
|
||||
}
|
||||
|
||||
.volume-slider-box,
|
||||
.brightness-slider-box {
|
||||
trough { background-color: $base; }
|
||||
}
|
||||
|
||||
.volume-bar highlight {
|
||||
@include rounding;
|
||||
background-image: linear-gradient(to right, $cyan, $blue_a);
|
||||
}
|
||||
|
||||
.brightness-slider-box scale highlight {
|
||||
@include rounding;
|
||||
background-image: linear-gradient(to right, $yellow, $yellow_a);
|
||||
}
|
||||
|
||||
.bottom-row {
|
||||
margin: .5rem 1rem;
|
||||
|
||||
.battery-icon { font-size: 2rem; }
|
||||
.battery-wattage { color: $magenta; }
|
||||
|
||||
.battery-status {
|
||||
color: $green;
|
||||
margin: 0 .5rem;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: $black;
|
||||
border-radius: 50%;
|
||||
margin-bottom: .1rem;
|
||||
padding: 0 .5rem;
|
||||
|
||||
label { font-size: 1.5rem; }
|
||||
&:hover { background-color: $black_a; }
|
||||
}
|
||||
}
|
||||
|
||||
.bt-connected {
|
||||
background-color: $blue;
|
||||
color: $red;
|
||||
|
||||
button:hover { background-color: rgba(0, 0, 0, .1); }
|
||||
}
|
||||
|
||||
.wifi-connected {
|
||||
background-color: $magenta;
|
||||
color: $red;
|
||||
|
||||
button:hover { background-color: rgba(0, 0, 0, .1); }
|
||||
}
|
80
home/programs/eww/css/_system.scss
Normal file
80
home/programs/eww/css/_system.scss
Normal file
|
@ -0,0 +1,80 @@
|
|||
* {
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
.membar {
|
||||
color: $yellow;
|
||||
}
|
||||
|
||||
.cpubar {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.batbar {
|
||||
color: $green;
|
||||
}
|
||||
|
||||
.membar,
|
||||
.cpubar,
|
||||
.batbar {
|
||||
background-color: $bg1;
|
||||
}
|
||||
|
||||
.iconmem {
|
||||
color: $yellow;
|
||||
}
|
||||
|
||||
.iconcpu {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.icon-text {
|
||||
font-size: 3rem;
|
||||
padding: .7rem;
|
||||
}
|
||||
|
||||
.sys-text-sub {
|
||||
color: $text;
|
||||
}
|
||||
|
||||
.sys-text-mem,
|
||||
.sys-text-cpu {
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.sys-icon-mem,
|
||||
.sys-icon-cpu {
|
||||
font-size: 1.5rem;
|
||||
margin: 1.5rem;
|
||||
}
|
||||
|
||||
.system-info-box {
|
||||
@include rounding;
|
||||
background-color: $black;
|
||||
margin: .5rem 1rem;
|
||||
padding: .5rem;
|
||||
}
|
||||
|
||||
.sys-mem,
|
||||
.sys-cpu {
|
||||
background-color: $bg;
|
||||
}
|
||||
|
||||
.sys-icon-mem,
|
||||
.sys-text-mem,
|
||||
.sys-mem {
|
||||
color: $yellow;
|
||||
}
|
||||
|
||||
.sys-icon-cpu,
|
||||
.sys-text-cpu,
|
||||
.sys-cpu {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.sys-box {
|
||||
margin: .3em;
|
||||
|
||||
box { margin-left: 1rem; }
|
||||
}
|
5
home/programs/eww/css/_volume.scss
Normal file
5
home/programs/eww/css/_volume.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
.vol-icon { color: $green; }
|
||||
.volbar highlight {
|
||||
background-image: linear-gradient(to right, $cyan, $blue_a);
|
||||
border-radius: 10px;
|
||||
}
|
127
home/programs/eww/default.nix
Normal file
127
home/programs/eww/default.nix
Normal file
|
@ -0,0 +1,127 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
dependencies = with pkgs; [
|
||||
config.wayland.windowManager.hyprland.package
|
||||
cfg.package
|
||||
bash
|
||||
bc
|
||||
blueberry
|
||||
bluez
|
||||
coreutils
|
||||
dbus
|
||||
dunst
|
||||
findutils
|
||||
gawk
|
||||
gnome.gnome-control-center
|
||||
gnused
|
||||
gojq
|
||||
imagemagick
|
||||
jaq
|
||||
light
|
||||
networkmanager
|
||||
pavucontrol
|
||||
playerctl
|
||||
procps
|
||||
pulseaudio
|
||||
ripgrep
|
||||
socat
|
||||
udev
|
||||
upower
|
||||
util-linux
|
||||
wget
|
||||
wireplumber
|
||||
wlogout
|
||||
fuzzel
|
||||
swaynotificationcenter
|
||||
];
|
||||
|
||||
reload_script = pkgs.writeShellScript "reload_eww" ''
|
||||
windows=$(eww windows | rg '\*' | tr -d '*')
|
||||
|
||||
systemctl --user restart eww.service
|
||||
|
||||
echo $windows | while read -r w; do
|
||||
eww open $w
|
||||
done
|
||||
'';
|
||||
|
||||
cfg = config.programs.eww-hyprland;
|
||||
in {
|
||||
options.programs.eww-hyprland = {
|
||||
enable = lib.mkEnableOption "eww Hyprland config";
|
||||
|
||||
package = lib.mkOption {
|
||||
type = with lib.types; nullOr package;
|
||||
default = pkgs.eww-wayland;
|
||||
defaultText = lib.literalExpression "pkgs.eww-wayland";
|
||||
description = "Eww package to use.";
|
||||
};
|
||||
|
||||
autoReload = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
defaultText = lib.literalExpression "false";
|
||||
description = "Whether to restart the eww daemon and windows on change.";
|
||||
};
|
||||
|
||||
colors = lib.mkOption {
|
||||
type = with lib.types; nullOr lines;
|
||||
default = null;
|
||||
defaultText = lib.literalExpression "null";
|
||||
description = ''
|
||||
SCSS file with colors defined in the same way as Catppuccin colors are,
|
||||
to be used by eww.
|
||||
|
||||
Defaults to Catppuccin Mocha.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [cfg.package];
|
||||
|
||||
# remove nix files
|
||||
xdg.configFile."eww" = {
|
||||
source = lib.cleanSourceWith {
|
||||
filter = name: _type: let
|
||||
baseName = baseNameOf (toString name);
|
||||
in
|
||||
!(lib.hasSuffix ".nix" baseName) && !(baseName == "_colors.scss");
|
||||
src = lib.cleanSource ./.;
|
||||
};
|
||||
|
||||
# links each file individually, which lets us insert the colors file separately
|
||||
recursive = true;
|
||||
|
||||
onChange =
|
||||
if cfg.autoReload
|
||||
then reload_script.outPath
|
||||
else "";
|
||||
};
|
||||
|
||||
# colors file
|
||||
xdg.configFile."eww/css/_colors.scss".text =
|
||||
if cfg.colors != null
|
||||
then cfg.colors
|
||||
else (builtins.readFile ./css/_colors.scss);
|
||||
|
||||
systemd.user.services.eww = {
|
||||
Unit = {
|
||||
Description = "Eww Daemon";
|
||||
# not yet implemented
|
||||
# PartOf = ["tray.target"];
|
||||
PartOf = ["graphical-session.target"];
|
||||
};
|
||||
Service = {
|
||||
Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}";
|
||||
ExecStart = "${cfg.package}/bin/eww daemon --no-daemonize";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
Install.WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
};
|
||||
}
|
93
home/programs/eww/eww.scss
Normal file
93
home/programs/eww/eww.scss
Normal file
|
@ -0,0 +1,93 @@
|
|||
@import 'css/colors';
|
||||
|
||||
@mixin rounding {
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
@mixin window {
|
||||
border: 1px solid $border;
|
||||
box-shadow: 0 2px 3px $shadow;
|
||||
margin: 5px 5px 0px;
|
||||
@include rounding;
|
||||
}
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
font-family: "Montreux Classic", "Jost *", Roboto, sans-serif;
|
||||
transition: 200ms ease;
|
||||
}
|
||||
|
||||
@import 'css/calendar';
|
||||
@import 'css/music';
|
||||
@import 'css/osd';
|
||||
@import 'css/sidebar';
|
||||
@import 'css/system';
|
||||
@import 'css/volume';
|
||||
|
||||
.bar {
|
||||
color: $fg;
|
||||
label {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.vis {
|
||||
background-color: $bg;
|
||||
border-radius: 24px;
|
||||
padding: 4px 24px;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 0px;
|
||||
border: 3px solid $outline;
|
||||
}
|
||||
|
||||
.invis {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: $bg;
|
||||
border: 1px solid $border;
|
||||
border-radius: 8px;
|
||||
|
||||
label {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.icon,
|
||||
.icon label { font-family: Material Symbols Outlined; }
|
||||
|
||||
.module { margin: 0 5px; }
|
||||
|
||||
.hour {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.minute {
|
||||
padding-right: .7rem;
|
||||
}
|
||||
|
||||
.date {
|
||||
background: $bg;
|
||||
color: $yellow;
|
||||
|
||||
label {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.bright-icon { color: $yellow_a; }
|
||||
.module-bt { font-size: 1.2rem; }
|
||||
|
||||
scale trough {
|
||||
background-color: $bg;
|
||||
border-radius: 24px;
|
||||
margin: 0 1rem;
|
||||
min-height: 10px;
|
||||
min-width: 70px;
|
||||
}
|
||||
|
||||
.workspaces {
|
||||
margin-left: 10px;
|
||||
button { transition: color 2s ease; }
|
||||
}
|
56
home/programs/eww/eww.yuck
Normal file
56
home/programs/eww/eww.yuck
Normal file
|
@ -0,0 +1,56 @@
|
|||
(include "./modules/clock.yuck")
|
||||
(include "./modules/music.yuck")
|
||||
(include "./modules/net.yuck")
|
||||
(include "./modules/sys.yuck")
|
||||
(include "./modules/variables.yuck")
|
||||
(include "./modules/volume.yuck")
|
||||
(include "./modules/workspaces.yuck")
|
||||
(include "./modules/current_win.yuck")
|
||||
|
||||
(include "./windows/calendar.yuck")
|
||||
(include "./windows/music.yuck")
|
||||
(include "./windows/osd.yuck")
|
||||
(include "./windows/system-menu.yuck")
|
||||
|
||||
(defwidget left []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "start"
|
||||
:class "vis"
|
||||
(workspaces)))
|
||||
|
||||
(defwidget right []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "end"
|
||||
:class "vis bar"
|
||||
(music-module)
|
||||
(volume-module)
|
||||
(net)
|
||||
(sys)
|
||||
(clock_module)))
|
||||
|
||||
(defwidget center []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "center"
|
||||
:class "vis bar"
|
||||
(current-win-module)))
|
||||
|
||||
(defwidget bar-box []
|
||||
(centerbox
|
||||
:class "invis bar"
|
||||
(left)
|
||||
(center)
|
||||
(right)))
|
||||
|
||||
(defwindow bar
|
||||
:monitor 0
|
||||
:geometry (geometry :x "0%"
|
||||
:y "0%"
|
||||
:width "98%"
|
||||
:height "24px"
|
||||
:anchor "top center")
|
||||
:stacking "fg"
|
||||
:exclusive true
|
||||
(bar-box))
|
8
home/programs/eww/modules/bluetooth.yuck
Normal file
8
home/programs/eww/modules/bluetooth.yuck
Normal file
|
@ -0,0 +1,8 @@
|
|||
(defwidget bluetooth []
|
||||
(button
|
||||
:class "module-bt module icon"
|
||||
:onclick "blueberry"
|
||||
:onrightclick "scripts/bluetooth toggle"
|
||||
:tooltip "${bluetooth.text} ${bluetooth.battery}"
|
||||
:style "color: ${bluetooth.color};"
|
||||
{bluetooth.icon}))
|
9
home/programs/eww/modules/bright.yuck
Normal file
9
home/programs/eww/modules/bright.yuck
Normal file
|
@ -0,0 +1,9 @@
|
|||
(defwidget bright []
|
||||
(box
|
||||
:class "module"
|
||||
(eventbox
|
||||
:onscroll "echo {} | sed -e 's/up/-U 1/g' -e 's/down/-A 1/g' | xargs light"
|
||||
(label
|
||||
:text {brightness.icon}
|
||||
:class "bright-icon icon"
|
||||
:tooltip "brightness ${round(brightness.percent, 0)}%"))))
|
24
home/programs/eww/modules/clock.yuck
Normal file
24
home/programs/eww/modules/clock.yuck
Normal file
|
@ -0,0 +1,24 @@
|
|||
(defvar date_rev false)
|
||||
|
||||
(defwidget clock_module []
|
||||
(eventbox
|
||||
:onhover "${EWW_CMD} update date_rev=true"
|
||||
:onhoverlost "${EWW_CMD} update date_rev=false"
|
||||
(overlay
|
||||
:class "module"
|
||||
(box
|
||||
:space-evenly false
|
||||
(label
|
||||
:text {time.hour}
|
||||
:class "hour")
|
||||
(label
|
||||
:text ":")
|
||||
(label
|
||||
:text {time.minute}
|
||||
:class "minute"))
|
||||
(revealer
|
||||
:reveal date_rev
|
||||
(button
|
||||
:class "date"
|
||||
:onclick "${EWW_CMD} open --toggle calendar"
|
||||
{time.date})))))
|
8
home/programs/eww/modules/current_win.yuck
Normal file
8
home/programs/eww/modules/current_win.yuck
Normal file
|
@ -0,0 +1,8 @@
|
|||
(defwidget current-win-module []
|
||||
(box
|
||||
(button
|
||||
:class "module"
|
||||
{current_win.title}
|
||||
)
|
||||
)
|
||||
)
|
28
home/programs/eww/modules/music.yuck
Normal file
28
home/programs/eww/modules/music.yuck
Normal file
|
@ -0,0 +1,28 @@
|
|||
(defwidget music-module []
|
||||
(eventbox
|
||||
:onhover "${EWW_CMD} update music_reveal=true"
|
||||
:onhoverlost "${EWW_CMD} update music_reveal=false"
|
||||
(box
|
||||
:class "module"
|
||||
:space-evenly false
|
||||
(box
|
||||
:class "song-cover-art"
|
||||
:style "background-image: url(\"${music.cover}\");")
|
||||
(button
|
||||
:class "module"
|
||||
:onclick "${EWW_CMD} open --toggle music"
|
||||
{music.status == "Stopped" || music.status == "" ? "" :
|
||||
"${music.artist} - ${music.title}"})
|
||||
(box
|
||||
:class "icon"
|
||||
{music.static == "Stopped" || music.status == "" ? "" : music.status == "Playing" ? "" : "" })
|
||||
(revealer
|
||||
:class "playctl"
|
||||
:transition "slideright"
|
||||
:reveal music_reveal
|
||||
:duration "350ms"
|
||||
(box
|
||||
:class "icon"
|
||||
(button :class "song-button" :onclick "playerctl previous" "")
|
||||
(button :class "song-button" :onclick "playerctl play-pause" {music.status == "Playing" ? "" : ""})
|
||||
(button :class "song-button" :onclick "playerctl next" ""))))))
|
7
home/programs/eww/modules/net.yuck
Normal file
7
home/programs/eww/modules/net.yuck
Normal file
|
@ -0,0 +1,7 @@
|
|||
(defwidget net []
|
||||
(button
|
||||
:class "module icon"
|
||||
:onclick "gnome-control-center &"
|
||||
:tooltip {net.essid}
|
||||
:style "color: ${net.color};"
|
||||
{net.icon}))
|
32
home/programs/eww/modules/sys.yuck
Normal file
32
home/programs/eww/modules/sys.yuck
Normal file
|
@ -0,0 +1,32 @@
|
|||
(defwidget sys []
|
||||
(box
|
||||
:class "module"
|
||||
:space-evenly false
|
||||
:spacing 5
|
||||
(circular-progress
|
||||
:value "${EWW_CPU.avg}"
|
||||
:class "cpubar"
|
||||
:thickness 3
|
||||
(button
|
||||
:tooltip "using ${round(EWW_CPU.avg,0)}% cpu"
|
||||
:onclick "${EWW_CMD} open --toggle system-menu"
|
||||
(label :class "icon-text" :text "")))
|
||||
|
||||
(circular-progress
|
||||
:value {memory.percent}
|
||||
:class "membar"
|
||||
:thickness 3
|
||||
(button
|
||||
:tooltip "using ${round(memory.percent,0)}% ram"
|
||||
:onclick "${EWW_CMD} open --toggle system-menu"
|
||||
(label :class "icon-text" :text "")))
|
||||
|
||||
(circular-progress
|
||||
:value "${EWW_BATTERY["BAT0"].capacity}"
|
||||
:class "batbar"
|
||||
:style "color: ${battery.color};"
|
||||
:thickness 3
|
||||
(button
|
||||
:tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%"
|
||||
:onclick "${EWW_CMD} open --toggle system-menu"
|
||||
(label :class "icon-text" :text "")))))
|
21
home/programs/eww/modules/variables.yuck
Normal file
21
home/programs/eww/modules/variables.yuck
Normal file
|
@ -0,0 +1,21 @@
|
|||
(defvar bright_reveal false)
|
||||
(defvar bt_rev false)
|
||||
(defvar music_reveal false)
|
||||
(defvar net_rev false)
|
||||
(defvar time_rev false)
|
||||
(defvar vol_reveal false)
|
||||
(defvar osd-brightness false)
|
||||
(defvar osd-volume false)
|
||||
|
||||
(defpoll time :interval "5s" `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "day": "%A"}'`)
|
||||
|
||||
(deflisten airplane "scripts/airplane")
|
||||
(deflisten battery "scripts/battery")
|
||||
(deflisten bluetooth "scripts/bluetooth")
|
||||
(deflisten brightness "scripts/brightness")
|
||||
(deflisten memory "scripts/memory")
|
||||
(deflisten music "scripts/music")
|
||||
(deflisten net "scripts/net")
|
||||
(deflisten volume "scripts/volume")
|
||||
(deflisten workspace "scripts/workspaces")
|
||||
(deflisten current_win "scripts/current_win")
|
11
home/programs/eww/modules/volume.yuck
Normal file
11
home/programs/eww/modules/volume.yuck
Normal file
|
@ -0,0 +1,11 @@
|
|||
(defwidget volume-module []
|
||||
(box
|
||||
:class "module icon"
|
||||
(eventbox
|
||||
:onscroll "echo {} | sed -e 's/up/-/g' -e 's/down/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.005%"
|
||||
:onclick "pavucontrol &"
|
||||
:onrightclick "scripts/volume mute SINK"
|
||||
(label
|
||||
:class "vol-icon"
|
||||
:tooltip "volume ${volume.percent}%"
|
||||
:text {volume.icon}))))
|
13
home/programs/eww/modules/workspaces.yuck
Normal file
13
home/programs/eww/modules/workspaces.yuck
Normal file
|
@ -0,0 +1,13 @@
|
|||
(defwidget workspaces []
|
||||
(eventbox
|
||||
:onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
|
||||
(box
|
||||
:class "module workspaces"
|
||||
:spacing 5
|
||||
(for ws in workspace
|
||||
(button
|
||||
:onclick "hyprctl dispatch workspace ${ws.number}"
|
||||
:class "ws icon"
|
||||
:style "color: ${ws.color};"
|
||||
; :tooltip {ws.tooltip}
|
||||
"●")))))
|
29
home/programs/eww/scripts/airplane
Executable file
29
home/programs/eww/scripts/airplane
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/bin/sh
|
||||
|
||||
icon() {
|
||||
if [ "$STATUS" = "no" ]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
toggle() {
|
||||
if [ "$STATUS" = "no" ]; then
|
||||
rfkill block all
|
||||
notify-send --urgency=normal -i airplane-mode-symbolic "Airplane Mode" "Airplane mode has been turned on!"
|
||||
else
|
||||
rfkill unblock all
|
||||
notify-send --urgency=normal -i airplane-mode-disabled-symbolic "Airplane Mode" "Airplane mode has been turned off!"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "toggle" ]; then
|
||||
toggle
|
||||
else
|
||||
while true; do
|
||||
STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
|
||||
icon
|
||||
sleep 3;
|
||||
done
|
||||
fi
|
65
home/programs/eww/scripts/battery
Executable file
65
home/programs/eww/scripts/battery
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
icons=("" "" "" "" "" "" "" "")
|
||||
num_icons=$(bc <<< "100 / ${#icons[@]}")
|
||||
|
||||
|
||||
geticon() {
|
||||
level=$(awk -v n="$CAPACITY" -v c="$num_icons" 'BEGIN{print int(n/c-1)}')
|
||||
if [[ "$level" -lt 0 ]]; then
|
||||
level=0
|
||||
fi
|
||||
echo "${icons[$level]}"
|
||||
}
|
||||
|
||||
status() {
|
||||
if [ "$STATE" = "Charging" ]; then
|
||||
echo -n "charging"
|
||||
|
||||
if [ "$RATE" -gt 0 ]; then
|
||||
echo ", $(gettime) left"
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
elif [ "$STATE" = "Discharging" ]; then
|
||||
echo "$(gettime)h left"
|
||||
else
|
||||
echo "fully charged"
|
||||
fi
|
||||
}
|
||||
|
||||
color() {
|
||||
if [ "$CAPACITY" -le 20 ]; then
|
||||
echo '#f38ba8'
|
||||
else
|
||||
echo '#a6e3a1'
|
||||
fi
|
||||
}
|
||||
|
||||
wattage() {
|
||||
microwatts=1000000
|
||||
echo "$(bc -l <<< "scale=1; $RATE / $microwatts") W"
|
||||
}
|
||||
|
||||
gettime() {
|
||||
FULL=$(cat /sys/class/power_supply/BAT0/energy_full)
|
||||
NOW=$(cat /sys/class/power_supply/BAT0/energy_now)
|
||||
|
||||
if [ "$RATE" -gt 0 ]; then
|
||||
if [ "$STATE" = "Discharging" ]; then
|
||||
EX="$NOW / $RATE"
|
||||
else
|
||||
EX="($FULL - $NOW) / $RATE"
|
||||
fi
|
||||
date -u -d@"$(bc -l <<< "$EX * 3600")" +%H:%M
|
||||
fi
|
||||
}
|
||||
|
||||
while true; do
|
||||
RATE=$(cat /sys/class/power_supply/BAT0/power_now)
|
||||
CAPACITY=$(cat /sys/class/power_supply/BAT0/capacity)
|
||||
STATE=$(cat /sys/class/power_supply/BAT0/status)
|
||||
|
||||
echo '{ "icon": "'"$(geticon)"'", "percent": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "color": "'"$(color)"'" }'
|
||||
sleep 3
|
||||
done
|
51
home/programs/eww/scripts/bluetooth
Executable file
51
home/programs/eww/scripts/bluetooth
Executable file
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
toggle() {
|
||||
status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
|
||||
|
||||
if [ "$status" = "unblocked" ]; then
|
||||
rfkill block bluetooth
|
||||
else
|
||||
rfkill unblock bluetooth
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "toggle" ]; then
|
||||
toggle
|
||||
else
|
||||
while true; do
|
||||
powered=$(bluetoothctl show | rg Powered | cut -f 2- -d ' ')
|
||||
status=$(bluetoothctl info)
|
||||
name=$(echo "$status" | rg Name | cut -f 2- -d ' ')
|
||||
mac=$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')
|
||||
|
||||
if [[ "$(echo "$status" | rg Percentage)" != "" ]]; then
|
||||
battery="$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | rg percentage | awk '{print $2}' | cut -f 1 -d '%')%"
|
||||
else
|
||||
battery=""
|
||||
fi
|
||||
|
||||
if [ "$powered" = "yes" ]; then
|
||||
if [ "$status" != "Missing device address argument" ]; then
|
||||
text="$name"
|
||||
icon=""
|
||||
color="#89b4fa"
|
||||
class="bt-connected"
|
||||
else
|
||||
icon=""
|
||||
text="Disconnected"
|
||||
color="#45475a"
|
||||
class=""
|
||||
fi
|
||||
else
|
||||
icon=""
|
||||
text="Bluetooth off"
|
||||
color="#45475a"
|
||||
class=""
|
||||
fi
|
||||
|
||||
echo '{ "icon": "'"$icon"'", "battery": "'"$battery"'", "text": "'"$text"'", "color": "'"$color"'", "class": "'"$class"'" }'
|
||||
|
||||
sleep 3
|
||||
done
|
||||
fi
|
61
home/programs/eww/scripts/brightness
Executable file
61
home/programs/eww/scripts/brightness
Executable file
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
icons=("" "" "")
|
||||
if [ ! "$XDG_CACHE_HOME" ]; then
|
||||
XDG_CACHE_HOME="/home/mihai/.local/cache"
|
||||
fi
|
||||
date="$XDG_CACHE_HOME/eww/osd_brightness.date"
|
||||
|
||||
osd() {
|
||||
if [ ! -f "$date" ]; then
|
||||
mkdir -p "$XDG_CACHE_HOME/eww"
|
||||
fi
|
||||
date +%s > "$date"
|
||||
}
|
||||
|
||||
osd_handler() {
|
||||
lock=0
|
||||
rundate=0
|
||||
if [ ! -f "$date" ]; then
|
||||
mkdir -p "$XDG_CACHE_HOME/eww"
|
||||
echo 0 > "$date"
|
||||
fi
|
||||
|
||||
while true; do
|
||||
# get dates
|
||||
rundate=$(cat "$date")
|
||||
currentdate=$(date +%s)
|
||||
|
||||
# handle showing
|
||||
if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
|
||||
eww open osd
|
||||
eww update osd-brightness=true
|
||||
lock=1
|
||||
elif [ "$((currentdate - rundate))" = "2" ] && [ "$lock" -eq 1 ]; then
|
||||
eww update osd-brightness=false
|
||||
lock=0
|
||||
if [ "$(eww get osd-brightness)" = "false" ] && [ "$(eww get osd-volume)" = "false" ]; then
|
||||
eww close osd
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
eww close osd
|
||||
}
|
||||
|
||||
if [ "$1" = "osd" ]; then
|
||||
osd
|
||||
else
|
||||
osd_handler &
|
||||
# initial
|
||||
icon=${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}
|
||||
echo '{ "percent": '"$(light)"', "icon": "'"$icon"'" }'
|
||||
|
||||
udevadm monitor | rg --line-buffered "backlight" | while read -r _; do
|
||||
icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}"
|
||||
|
||||
echo '{ "percent": '"$(light)"', "icon": "'"$icon"'" }'
|
||||
done
|
||||
fi
|
10
home/programs/eww/scripts/current_win
Executable file
10
home/programs/eww/scripts/current_win
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
socat -u UNIX-CLIENT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock STDOUT |
|
||||
while read line; do
|
||||
if [[ "$line" == activewindow\>\>* ]]; then
|
||||
windowtitle="$(echo $line | cut -d',' -f 2)"
|
||||
echo '{"title": "'$windowtitle'"}'
|
||||
fi
|
||||
done
|
||||
|
20
home/programs/eww/scripts/memory
Executable file
20
home/programs/eww/scripts/memory
Executable file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
while true; do
|
||||
# human-readable
|
||||
freeH=$(free -h --si | rg "Mem:")
|
||||
# non-human-readable
|
||||
freeN=$(free --mega | rg "Mem:")
|
||||
|
||||
total="$(echo "$freeH" | awk '{ print $2 }')"
|
||||
used="$(echo "$freeH" | awk '{ print $3 }')"
|
||||
t="$(echo "$freeN" | awk '{ print $2 }')"
|
||||
u="$(echo "$freeN" | awk '{ print $3 }')"
|
||||
|
||||
free=$(printf '%.1fG' "$(bc -l <<< "($t - $u) / 1000")")
|
||||
perc=$(printf '%.1f' "$(free -m | rg Mem | awk '{print ($3/$2)*100}')")
|
||||
|
||||
echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "percent": '"$perc"' }'
|
||||
|
||||
sleep 3
|
||||
done
|
111
home/programs/eww/scripts/music
Executable file
111
home/programs/eww/scripts/music
Executable file
|
@ -0,0 +1,111 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
get_status() {
|
||||
s=$1
|
||||
if [ "$s" = "Playing" ]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
get_length_sec() {
|
||||
len=$1
|
||||
if [ -z "$len" ]; then
|
||||
echo 0
|
||||
else
|
||||
bc <<<"$len / 1000000"
|
||||
fi
|
||||
}
|
||||
|
||||
get_length_time() {
|
||||
len=$1
|
||||
if [ -n "$len" ]; then
|
||||
len=$(bc <<<"$len / 1000000 + 1")
|
||||
date -d@"$len" +%M:%S
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
get_position() {
|
||||
pos=$1
|
||||
len=$2
|
||||
if [ -n "$pos" ]; then
|
||||
bc -l <<<"$pos / $len * 100"
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
}
|
||||
|
||||
get_position_time() {
|
||||
pos=$1
|
||||
len=$2
|
||||
if [ -n "$pos" ]; then
|
||||
date -d@"$(bc <<<"$pos / 1000000")" +%M:%S
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
get_cover() {
|
||||
mkdir -p "$XDG_CACHE_HOME/eww_covers"
|
||||
cd "$XDG_CACHE_HOME/eww_covers" || exit
|
||||
|
||||
IMGPATH="$XDG_CACHE_HOME/eww_covers/cover_art.png"
|
||||
|
||||
COVER_URL="$1"
|
||||
|
||||
if [[ "$COVER_URL" = https* ]]; then
|
||||
if [ ! -e "$XDG_CACHE_HOME/eww_covers/$(basename "$COVER_URL")" ]; then
|
||||
wget -N "$COVER_URL" -o /dev/null
|
||||
fi
|
||||
|
||||
rm "$IMGPATH"
|
||||
ln -s "$(basename "$COVER_URL")" "$IMGPATH"
|
||||
|
||||
IMG="${IMGPATH}"
|
||||
elif [ "$COVER_URL" = "" ]; then
|
||||
IMG=""
|
||||
else
|
||||
IMG="$COVER_URL"
|
||||
fi
|
||||
|
||||
echo "$IMG"
|
||||
}
|
||||
|
||||
sanitize() {
|
||||
echo "$1" | sed 's/"/\"/g'
|
||||
}
|
||||
|
||||
prevCover=''
|
||||
|
||||
playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\{{mpris:length}}\{{mpris:artUrl}}' 2>/dev/null | while IFS="$(printf '\')" read -r title artist status position len cover; do
|
||||
if [[ "$cover" != "$prevCover" ]]; then
|
||||
COVER=$(get_cover "$cover")
|
||||
|
||||
if [ "$COVER" != "" ]; then
|
||||
cols=$(convert "$COVER" -colors 2 -format "%c" histogram:info: | awk '{print $3}')
|
||||
color1=$(echo "$cols" | head -1)
|
||||
color1=$(printf "rgba(%d, %d, %d, 0.6)" ${color1:1:2} ${color1:3:2} ${color1:5:2})
|
||||
color2=$(echo "$cols" | tail -1)
|
||||
else
|
||||
color1="#1e1e2e"
|
||||
color2="#28283d"
|
||||
fi
|
||||
fi
|
||||
|
||||
jaq --null-input -r -c \
|
||||
--arg artist "$(sanitize "$artist")" \
|
||||
--arg title "$(sanitize "$title")" \
|
||||
--arg status "$status" \
|
||||
--arg pos "$(get_position "$position" "$len")" \
|
||||
--arg pos_time "$(get_position_time "$position" "$len")" \
|
||||
--arg length "$(get_length_time "$len")" \
|
||||
--arg cover "$COVER" \
|
||||
--arg color1 "$color1" \
|
||||
--arg color2 "$color2" \
|
||||
'{"artist": $artist, "title": $title, "status": $status, "position": $pos, "position_time": $pos_time, "length": $length, "cover": $cover, "color1": $color1, "color2": $color2}'
|
||||
|
||||
prevCover=$cover
|
||||
done
|
43
home/programs/eww/scripts/net
Executable file
43
home/programs/eww/scripts/net
Executable file
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
toggle() {
|
||||
status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
|
||||
|
||||
if [ "$status" = "unblocked" ]; then
|
||||
rfkill block wlan
|
||||
else
|
||||
rfkill unblock wlan
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "toggle" ]; then
|
||||
toggle
|
||||
else
|
||||
while true; do
|
||||
status=$(nmcli -f state g| tail -1)
|
||||
wifistatus=$(nmcli -t -f in-use,ssid,signal dev wifi | rg '\*' | sed 's/\"/\\"/g')
|
||||
signal=$(echo "$wifistatus" | awk -F: '{print $3}')
|
||||
essid=$(echo "$wifistatus" | awk -F: '{print $2}')
|
||||
|
||||
icons=("" "" "" "" "")
|
||||
|
||||
if [ "$status" = "disconnected" ] ; then
|
||||
icon=""
|
||||
color="#988ba2"
|
||||
class=""
|
||||
else
|
||||
level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}')
|
||||
if [ "$level" -gt 4 ]; then
|
||||
level=4
|
||||
fi
|
||||
|
||||
icon=${icons[$level]}
|
||||
color="#cba6f7"
|
||||
class="wifi-connected"
|
||||
fi
|
||||
|
||||
echo '{ "essid": "'"$essid"'", "icon": "'"$icon"'", "color": "'"$color"'", "class": "'"$class"'" }'
|
||||
|
||||
sleep 3
|
||||
done
|
||||
fi
|
102
home/programs/eww/scripts/volume
Executable file
102
home/programs/eww/scripts/volume
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
volicons=("" "" "")
|
||||
if [ ! "$XDG_CACHE_HOME" ]; then
|
||||
XDG_CACHE_HOME="/home/mihai/.local/cache"
|
||||
fi
|
||||
date="$XDG_CACHE_HOME/eww/osd_vol.date"
|
||||
|
||||
vol() {
|
||||
wpctl get-volume @DEFAULT_AUDIO_"$1"@ | awk '{print int($2*100)}'
|
||||
}
|
||||
ismuted() {
|
||||
wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -i muted
|
||||
echo $?
|
||||
}
|
||||
setvol() {
|
||||
wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')"
|
||||
}
|
||||
setmute() {
|
||||
wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle
|
||||
}
|
||||
|
||||
osd() {
|
||||
if [ ! -f "$date" ]; then
|
||||
mkdir -p "$XDG_CACHE_HOME/eww"
|
||||
fi
|
||||
date +%s > "$date"
|
||||
}
|
||||
|
||||
osd_handler() {
|
||||
lock=0
|
||||
rundate=0
|
||||
if [ ! -f "$date" ]; then
|
||||
mkdir -p "$XDG_CACHE_HOME/eww"
|
||||
echo 0 > "$date"
|
||||
fi
|
||||
|
||||
while true; do
|
||||
# get dates
|
||||
rundate=$(cat "$date")
|
||||
currentdate=$(date +%s)
|
||||
|
||||
# handle showing
|
||||
if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
|
||||
eww open osd
|
||||
eww update osd-volume=true
|
||||
lock=1
|
||||
elif [ "$((currentdate - rundate))" = "2" ] && [ "$lock" -eq 1 ]; then
|
||||
eww update osd-volume=false
|
||||
lock=0
|
||||
if [ "$(eww get osd-volume)" = "false" ] && [ "$(eww get osd-brightness)" = "false" ]; then
|
||||
eww close osd
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
eww close osd
|
||||
}
|
||||
|
||||
if [ "$1" = "mute" ]; then
|
||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||||
echo "Can only mute SINK or SOURCE"; exit 1
|
||||
fi
|
||||
setmute "$2"
|
||||
elif [ "$1" = "setvol" ]; then
|
||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||||
echo "Can only set volume for SINK or SOURCE"; exit 1
|
||||
elif [ "$3" -lt 1 ] || [ "$3" -gt 100 ]; then
|
||||
echo "Volume must be between 1 and 100"; exit 1
|
||||
fi
|
||||
setvol "$2" "$3"
|
||||
elif [ "$1" = "osd" ]; then
|
||||
osd
|
||||
else
|
||||
# initial values
|
||||
lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
|
||||
ismuted=$(ismuted "SINK")
|
||||
|
||||
if [ "$ismuted" = 1 ]; then
|
||||
icon="${volicons[$lvl]}"
|
||||
else
|
||||
icon=""
|
||||
fi
|
||||
echo '{ "icon": "'"$icon"'", "percent": "'"$(vol "SINK")"'", "microphone": "'"$(vol "SOURCE")"'" }'
|
||||
|
||||
osd_handler &
|
||||
|
||||
# event loop
|
||||
pactl subscribe | rg --line-buffered "change" | while read -r _; do
|
||||
lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
|
||||
ismuted=$(ismuted "SINK")
|
||||
|
||||
if [ "$ismuted" = 1 ]; then
|
||||
icon="${volicons[$lvl]}"
|
||||
else
|
||||
icon=""
|
||||
fi
|
||||
echo '{ "icon": "'"$icon"'", "percent": "'"$(vol "SINK")"'", "microphone": "'"$(vol "SOURCE")"'" }'
|
||||
done
|
||||
fi
|
99
home/programs/eww/scripts/workspaces
Executable file
99
home/programs/eww/scripts/workspaces
Executable file
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# define colors
|
||||
# red peach green blue
|
||||
colors=("#f38ba8" "#fab387" "#a6e3a1" "#89b4fa")
|
||||
# pink yellow teal lavender
|
||||
dimmed=("#f5c2e7" "#f9e2af" "#94e2d5" "#b4befe")
|
||||
empty="#313244"
|
||||
|
||||
# get initial focused workspace
|
||||
focusedws=$(hyprctl -j monitors | jaq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
||||
|
||||
declare -A o=([1]=0 [2]=0 [3]=0 [4]=0)
|
||||
declare -A monitormap
|
||||
declare -A workspaces
|
||||
|
||||
# set color for each workspace
|
||||
status() {
|
||||
if [ "${o[$1]}" -eq 1 ]; then
|
||||
mon=${monitormap[${workspaces[$1]}]}
|
||||
|
||||
if [ "$focusedws" -eq "$1" ]; then
|
||||
echo -n "#27ae60"
|
||||
# echo -n "${colors[$mon]}"
|
||||
else
|
||||
# echo -n "${dimmed[$mon]}"
|
||||
echo -n "#fdbc4b"
|
||||
fi
|
||||
else
|
||||
# echo -n "$empty"
|
||||
echo -n "#2f343f"
|
||||
fi
|
||||
}
|
||||
|
||||
# handle workspace create/destroy
|
||||
workspace_event() {
|
||||
o[$1]=$2
|
||||
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
|
||||
}
|
||||
# handle monitor (dis)connects
|
||||
monitor_event() {
|
||||
while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | gojq -r '.[]|"\(.name) \(.id) "')
|
||||
}
|
||||
|
||||
# get all apps titles in a workspace
|
||||
applist() {
|
||||
ws="$1"
|
||||
|
||||
apps=$(hyprctl -j clients | jaq -jr '.[] | select(.workspace.id == '"$ws"') | .title + "\\n"')
|
||||
echo -En "${apps%"\n"}"
|
||||
}
|
||||
|
||||
# generate the json for eww
|
||||
generate() {
|
||||
echo -n '['
|
||||
|
||||
for i in {1..4}; do
|
||||
echo -n ''"$([ "$i" -eq 1 ] || echo ,)" '{ "number": "'"$i"'", "color": "'"$(status "$i")"'" }' #, "tooltip": "'$(applist "$i")'" }'
|
||||
done
|
||||
|
||||
echo ']'
|
||||
}
|
||||
|
||||
# setup
|
||||
|
||||
# add monitors
|
||||
monitor_event
|
||||
|
||||
# add workspaces
|
||||
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
|
||||
|
||||
# check occupied workspaces
|
||||
for num in "${!workspaces[@]}"; do
|
||||
o[$num]=1
|
||||
done
|
||||
# generate initial widget
|
||||
generate
|
||||
|
||||
# main loop
|
||||
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "workspace|mon(itor)?" | while read -r line; do
|
||||
case ${line%>>*} in
|
||||
"workspace")
|
||||
focusedws=${line#*>>}
|
||||
;;
|
||||
"focusedmon")
|
||||
focusedws=${line#*,}
|
||||
;;
|
||||
"createworkspace")
|
||||
workspace_event "${line#*>>}" 1
|
||||
;;
|
||||
"destroyworkspace")
|
||||
workspace_event "${line#*>>}" 0
|
||||
;;
|
||||
"monitor"*)
|
||||
monitor_event
|
||||
;;
|
||||
esac
|
||||
generate
|
||||
done
|
14
home/programs/eww/windows/calendar.yuck
Normal file
14
home/programs/eww/windows/calendar.yuck
Normal file
|
@ -0,0 +1,14 @@
|
|||
(defwidget calendar-win []
|
||||
(box
|
||||
:class "calendar-win"
|
||||
(calendar)))
|
||||
|
||||
(defwindow calendar
|
||||
:monitor 0
|
||||
:geometry (geometry
|
||||
:x "0%"
|
||||
:y "0%"
|
||||
:anchor "top right"
|
||||
:width "0px"
|
||||
:height "0px")
|
||||
(calendar-win))
|
55
home/programs/eww/windows/music.yuck
Normal file
55
home/programs/eww/windows/music.yuck
Normal file
|
@ -0,0 +1,55 @@
|
|||
(defwidget music []
|
||||
(box
|
||||
:class "music-window"
|
||||
:space-evenly false
|
||||
:style "background-color: ${music.color1}; border: 1px solid ${music.color2};"
|
||||
(box
|
||||
:class "music-cover-art"
|
||||
:style "background-image: url(\"${music.cover}\");")
|
||||
(box
|
||||
:orientation "v"
|
||||
:class "music-box"
|
||||
(label
|
||||
:class "music-title"
|
||||
:wrap true
|
||||
:text {music.title})
|
||||
(label
|
||||
:class "music-artist"
|
||||
:wrap true
|
||||
:text {music.artist})
|
||||
(centerbox
|
||||
:halign "center"
|
||||
:class "music-button-box icon"
|
||||
(button :class "music-button" :onclick "playerctl previous" "")
|
||||
(button :class "music-button" :onclick "playerctl play-pause" {music.status})
|
||||
(button :class "music-button" :onclick "playerctl next" ""))
|
||||
(box
|
||||
:orientation "v"
|
||||
(box
|
||||
(label
|
||||
:xalign 0
|
||||
:class "music-time"
|
||||
:text {music.position_time})
|
||||
(label
|
||||
:xalign 1
|
||||
:class "music-time"
|
||||
:text {music.length}))
|
||||
(box
|
||||
:class "music-bar"
|
||||
(scale
|
||||
; doesn't work, looking for other ways
|
||||
; :style "background: linear-gradient(to right, ${music.color1}, ${music.color2});"
|
||||
:onchange "playerctl position `bc <<< \"{} * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
|
||||
:value {music.position}))))))
|
||||
|
||||
(defwindow music
|
||||
:stacking "fg"
|
||||
:focusable false
|
||||
:monitor 0
|
||||
:geometry (geometry
|
||||
:x "0%"
|
||||
:y "0%"
|
||||
:width "0%"
|
||||
:height "0%"
|
||||
:anchor "top center")
|
||||
(music))
|
43
home/programs/eww/windows/osd.yuck
Normal file
43
home/programs/eww/windows/osd.yuck
Normal file
|
@ -0,0 +1,43 @@
|
|||
(defwidget osd-part [icon value class]
|
||||
(box
|
||||
:class "osd-part osd-${class}"
|
||||
:orientation "v"
|
||||
:space-evenly false
|
||||
(scale
|
||||
:flipped true
|
||||
:orientation "v"
|
||||
:value value)
|
||||
(label
|
||||
:text icon)))
|
||||
|
||||
(defwidget osd []
|
||||
(box
|
||||
:class "osd-container"
|
||||
:space-evenly false
|
||||
(revealer
|
||||
:reveal {osd-brightness}
|
||||
:transition "slideright"
|
||||
(osd-part
|
||||
:class "brightness"
|
||||
:icon {brightness.icon}
|
||||
:value {brightness.percent}))
|
||||
(revealer
|
||||
:reveal {osd-volume}
|
||||
:transition "slideright"
|
||||
(osd-part
|
||||
:class "volume"
|
||||
:icon {volume.icon}
|
||||
:value {volume.percent})))
|
||||
)
|
||||
|
||||
(defwindow osd
|
||||
:stacking "fg"
|
||||
:focusable false
|
||||
:monitor 0
|
||||
:geometry (geometry
|
||||
:x "1%"
|
||||
:y "0%"
|
||||
:width "0%"
|
||||
:height "0%"
|
||||
:anchor "center left")
|
||||
(osd))
|
204
home/programs/eww/windows/system-menu.yuck
Normal file
204
home/programs/eww/windows/system-menu.yuck
Normal file
|
@ -0,0 +1,204 @@
|
|||
(defwidget system-menu []
|
||||
(box
|
||||
:class "system-menu-box"
|
||||
:space-evenly false
|
||||
:orientation "v"
|
||||
(box
|
||||
:class "top-row"
|
||||
:space-evenly false
|
||||
(label
|
||||
:class "time"
|
||||
:text "${time.hour}:${time.minute}")
|
||||
(box
|
||||
:class "date-box"
|
||||
:space-evenly false
|
||||
(label
|
||||
:class "date"
|
||||
:text {time.date})
|
||||
(label
|
||||
:class "day"
|
||||
:text {time.day})))
|
||||
|
||||
(centerbox
|
||||
:class "system-row"
|
||||
(box
|
||||
:class "wifi-box"
|
||||
:space-evenly false
|
||||
:orientation "v"
|
||||
(box
|
||||
:class "element icon ${net.class}"
|
||||
:space-evenly false
|
||||
(button
|
||||
:class "wifi-button"
|
||||
:onclick "scripts/net toggle"
|
||||
{net.icon})
|
||||
(label
|
||||
:class "separator"
|
||||
:text "│")
|
||||
(button
|
||||
:class "wifi-arrow-btn"
|
||||
:onclick "eww close system-menu && gnome-control-center &"
|
||||
""))
|
||||
(label
|
||||
:text {net.essid}
|
||||
:xalign 0.5
|
||||
:limit-width 15))
|
||||
|
||||
(box
|
||||
:class "bluetooth-box"
|
||||
:space-evenly false
|
||||
:orientation "v"
|
||||
(box
|
||||
:class "element icon ${bluetooth.class}"
|
||||
:space-evenly false
|
||||
(button
|
||||
:class "bluetooth-button"
|
||||
:onclick "scripts/bluetooth toggle"
|
||||
{bluetooth.icon})
|
||||
(label
|
||||
:class "separator"
|
||||
:text "│")
|
||||
(button
|
||||
:class "bluetooth-arrow-btn"
|
||||
:onclick "eww close system-menu && blueberry"
|
||||
""))
|
||||
(label
|
||||
:text {bluetooth.text}
|
||||
:xalign 0.5
|
||||
:tooltip "${bluetooth.text} ${bluetooth.battery}"
|
||||
:limit-width 15))
|
||||
|
||||
(box
|
||||
:class "airplane-box"
|
||||
:space-evenly false
|
||||
:orientation "v"
|
||||
(box
|
||||
:class "element"
|
||||
(button
|
||||
:class "airplane-button"
|
||||
:onclick "scripts/airplane toggle"
|
||||
airplane))
|
||||
(label
|
||||
:text "Airplane Mode"
|
||||
:xalign 0.5
|
||||
:limit-width 16)))
|
||||
|
||||
(box
|
||||
:class "sliders"
|
||||
:orientation "v"
|
||||
(box
|
||||
:class "volume-slider-box"
|
||||
:space-evenly false
|
||||
(button
|
||||
:class "volume-icon icon"
|
||||
:onclick "scripts/volume mute SINK"
|
||||
{volume.icon})
|
||||
(scale
|
||||
:class "volume-bar"
|
||||
:value {volume.percent}
|
||||
:tooltip "volume on ${volume.percent}%"
|
||||
:onchange "scripts/volume setvol SINK {}"))
|
||||
(box
|
||||
:class "brightness-slider-box"
|
||||
:space-evenly false
|
||||
(button
|
||||
:class "brightness-slider-icon icon"
|
||||
{brightness.icon})
|
||||
(scale
|
||||
:class "brightness-slider"
|
||||
:value {brightness.percent}
|
||||
:marks true
|
||||
:onchange "light -S {}")))
|
||||
|
||||
(box
|
||||
:class "system-info-box"
|
||||
|
||||
; cpu
|
||||
(box
|
||||
:class "sys-box"
|
||||
:space-evenly false
|
||||
:halign "start"
|
||||
(circular-progress
|
||||
:value "${EWW_CPU.avg}"
|
||||
:class "sys-cpu"
|
||||
:thickness 3
|
||||
(label
|
||||
:text ""
|
||||
:class "sys-icon-cpu icon"))
|
||||
(box
|
||||
:orientation "v"
|
||||
:vexpand false
|
||||
(label
|
||||
:text "cpu"
|
||||
:halign "start"
|
||||
:class "sys-text-cpu")
|
||||
(label
|
||||
:text "${round(EWW_CPU.avg,2)}%"
|
||||
:halign "start"
|
||||
:class "sys-text-sub")
|
||||
(label
|
||||
:text "${EWW_CPU.cores[0].freq} MHz"
|
||||
:halign "start"
|
||||
:class "sys-text-sub")))
|
||||
|
||||
; memory
|
||||
(box
|
||||
:class "sys-box"
|
||||
:space-evenly false
|
||||
:halign "end"
|
||||
(circular-progress
|
||||
:value {memory.percent}
|
||||
:class "sys-mem"
|
||||
:thickness 3
|
||||
(label
|
||||
:text ""
|
||||
:class "sys-icon-mem icon"))
|
||||
(box
|
||||
:orientation "v"
|
||||
(label
|
||||
:text "memory"
|
||||
:halign "start"
|
||||
:class "sys-text-mem")
|
||||
(label
|
||||
:text "${memory.used} | ${memory.total}"
|
||||
:halign "start"
|
||||
:class "sys-text-sub"))))
|
||||
|
||||
(centerbox
|
||||
:class "bottom-row"
|
||||
(box
|
||||
:class "battery-box"
|
||||
:space-evenly false
|
||||
:halign "start"
|
||||
(label
|
||||
:class "battery-icon icon"
|
||||
:style "color: ${battery.color}"
|
||||
:text {battery.icon})
|
||||
(label
|
||||
:text {EWW_BATTERY["BAT0"].capacity})
|
||||
(label
|
||||
:class "battery-status"
|
||||
:text {battery.status})
|
||||
(label
|
||||
:class "battery-wattage"
|
||||
:text {battery.wattage}))
|
||||
(label)
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "end"
|
||||
(button
|
||||
:halign "end"
|
||||
:class "power-button icon"
|
||||
:onclick "wlogout -p layer-shell &"
|
||||
"")))))
|
||||
|
||||
(defwindow system-menu
|
||||
:stacking "fg"
|
||||
:monitor 0
|
||||
:geometry (geometry
|
||||
:x "0"
|
||||
:y "0"
|
||||
:width "0%"
|
||||
:height "0%"
|
||||
:anchor "right top")
|
||||
(system-menu))
|
Loading…
Add table
Add a link
Reference in a new issue