feat: add a lot of stuff

This commit is contained in:
Jacob Bachmann 2023-12-11 15:48:55 +01:00
parent 8eb88574fb
commit 6067f0ff0b
Signed by: bchmnn
GPG key ID: 732A612DAD28067D
47 changed files with 578 additions and 136 deletions

View file

@ -0,0 +1,317 @@
{ pkgs, lib, config, ... }:
let
cfg = config.wayland.windowManager.sway.config;
common = (import ../common.nix) { pkgs = pkgs; lib = lib; };
in
{
imports = [
./kanshi.nix
./swaync
./waybar.nix
./wofi.nix
];
home.packages = with pkgs; [
brightnessctl # control screen brightness
pavucontrol # control audio
playerctl # control player
networkmanagerapplet # control network
dracula-theme # gtk theme
gnome3.adwaita-icon-theme # default gnome cursors
wl-clipboard # cli tool to manage wayland clipboard
sway-contrib.grimshot
wdisplays
wlr-randr
kanshi # display manager
nextcloud-client # self hosted cloud client
plasma5Packages.kdeconnect-kde # sync phone and pc
];
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
};
wayland.windowManager.sway = {
enable = true;
wrapperFeatures = {
base = true;
gtk = true;
};
xwayland = true;
extraSessionCommands = ''
export CLUTTER_BACKEND=wayland;
export GDK_BACKEND=wayland;
export GDK_DPI_SCALE=1;
export NIXOS_OZONE_WL=1;
export WLR_NO_HARDWARE_CURSORS=1;
export MOZ_ENABLE_WAYLAND=1;
export MOZ_USE_XINPUT2=1;
export XDG_SESSION_TYPE=wayland;
export XDG_CURRENT_DESKTOP=sway;
# SDL:
export SDL_VIDEODRIVER=wayland
# QT (needs qt5.qtwayland in systemPackages):
export QT_QPA_PLATFORM=wayland-egl
# export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
# Fix for some Java AWT applications (e.g. Android Studio),
# use this if they aren't displayed properly:
export _JAVA_AWT_WM_NONREPARENTING=1
export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on";
# Nvidia
# export WLR_RENDERER=vulkan;
# export GBM_BACKEND=nvidia-drm;
# export __GL_GSYNC_ALLOWED=0;
# export __GL_VRR_ALLOWED=0;
# export __GLX_VENDOR_LIBRARY_NAME=nvidia;
# Xwayland compat
# export XWAYLAND_NO_GLAMOR=1;
'';
config = {
modifier = "Mod4";
terminal = "${pkgs.alacritty}/bin/alacritty";
menu = "${pkgs.wofi}/bin/wofi";
startup = with pkgs; [
{ command = "${kanshi}/bin/kanshi"; }
{ command = "${networkmanagerapplet}/bin/nm-applet"; }
{ command = "${blueman}/bin/blueman-applet"; }
{ command = "${swaynotificationcenter}/bin/swaync"; }
{ command = "${nextcloud-client}/bin/nextcloud"; }
{ command = "${plasma5Packages.kdeconnect-kde}/bin/kdeconnect-indicator"; }
];
input = {
"2:7:SynPS/2_Synaptics_TouchPad" = {
accel_profile = "flat";
dwt = "enabled";
dwtp = "enabled";
tap = "enabled";
natural_scroll = "enabled";
middle_emulation = "enabled";
scroll_factor = "0.3";
};
"2:10:TPPS/2_IBM_TrackPoint" = {
accel_profile = "flat";
scroll_factor = "0.5";
};
};
output = {
"*".bg = "${common.wallpaper} fill";
};
left = "h";
down = "j";
up = "k";
right = "l";
keybindings = {
"${cfg.modifier}+Ctrl+Shift+l" = "exec ${pkgs.swaylock-effects}/bin/swaylock --screenshots --clock --indicator --indicator-radius 100 --indicator-thickness 7 --effect-blur 7x5 --effect-vignette 0.5:0.5 --ring-color ffffff --key-hl-color ${common.colorschemes.default._activeDark} --line-color 00000000 --inside-color 00000088 --inside-ver-color ${common.colorschemes.default._activeDark} --separator-color 00000000 --text-color ${common.colorschemes.default._activeDark} --fade-in 0.1";
# Basics
"${cfg.modifier}+Return" = "exec ${cfg.terminal}";
"${cfg.modifier}+q" = "kill";
"${cfg.modifier}+Space" = "exec ${cfg.menu}";
"${cfg.modifier}+Shift+c" = "reload";
"${cfg.modifier}+Shift+q" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
# Focus
"${cfg.modifier}+${cfg.left}" = "focus left";
"${cfg.modifier}+${cfg.down}" = "focus down";
"${cfg.modifier}+${cfg.up}" = "focus up";
"${cfg.modifier}+${cfg.right}" = "focus right";
"${cfg.modifier}+p" = "focus output left";
"${cfg.modifier}+n" = "focus output right";
# Moving
"${cfg.modifier}+Shift+${cfg.left}" = "move left";
"${cfg.modifier}+Shift+${cfg.down}" = "move down";
"${cfg.modifier}+Shift+${cfg.up}" = "move up";
"${cfg.modifier}+Shift+${cfg.right}" = "move right";
# Workspaces
"${cfg.modifier}+1" = "workspace number 1";
"${cfg.modifier}+2" = "workspace number 2";
"${cfg.modifier}+3" = "workspace number 3";
"${cfg.modifier}+4" = "workspace number 4";
"${cfg.modifier}+5" = "workspace number 5";
"${cfg.modifier}+6" = "workspace number 6";
"${cfg.modifier}+7" = "workspace number 7";
"${cfg.modifier}+8" = "workspace number 8";
"${cfg.modifier}+9" = "workspace number 9";
"${cfg.modifier}+0" = "workspace number 10";
"${cfg.modifier}+Shift+1" = "move container to workspace number 1";
"${cfg.modifier}+Shift+2" = "move container to workspace number 2";
"${cfg.modifier}+Shift+3" = "move container to workspace number 3";
"${cfg.modifier}+Shift+4" = "move container to workspace number 4";
"${cfg.modifier}+Shift+5" = "move container to workspace number 5";
"${cfg.modifier}+Shift+6" = "move container to workspace number 6";
"${cfg.modifier}+Shift+7" = "move container to workspace number 7";
"${cfg.modifier}+Shift+8" = "move container to workspace number 8";
"${cfg.modifier}+Shift+9" = "move container to workspace number 9";
"${cfg.modifier}+Shift+0" = "move container to workspace number 10";
"${cfg.modifier}+Control+${cfg.down}" = "workspace prev";
"${cfg.modifier}+Control+${cfg.up}" = "workspace next";
"${cfg.modifier}+Control+Shift+${cfg.down}" = "move workspace to output left";
"${cfg.modifier}+Control+Shift+${cfg.up}" = "move workspace to output right";
# Splits
"${cfg.modifier}+b" = "splith";
"${cfg.modifier}+v" = "splitv";
# Layouts
"${cfg.modifier}+s" = "layout stacking";
"${cfg.modifier}+w" = "layout tabbed";
"${cfg.modifier}+e" = "layout toggle split";
"${cfg.modifier}+f" = "fullscreen toggle";
"${cfg.modifier}+a" = "focus parent";
"${cfg.modifier}+d" = "floating toggle";
"${cfg.modifier}+Shift+d" = "focus mode_toggle";
# Scratchpad
"${cfg.modifier}+Shift+minus" = "move scratchpad";
"${cfg.modifier}+minus" = "scratchpad show";
# Resize mode
"${cfg.modifier}+r" = "mode resize";
# Multimedia Keys
"XF86AudioRaiseVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+";
"XF86AudioLowerVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-";
"XF86AudioMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
"XF86AudioMicMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
"XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%-";
"XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%+";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
# Screenshot
"Print" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area";
# Programs
"${cfg.modifier}+Shift+v" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
"${cfg.modifier}+Shift+b" = "exec ${pkgs.blueman}/bin/blueman-manager";
"${cfg.modifier}+Shift+n" = "exec ${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
"${cfg.modifier}+Shift+a" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
};
fonts = {
names = [ common.font ];
style = "Bold";
size = 12.0;
};
seat = {
"*" = {
xcursor_theme = common.gtk;
};
};
window = {
titlebar = false;
border = 4;
};
gaps = {
inner = 5;
};
colors = {
focused = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
focusedInactive = {
border = common.colorschemes.default.inactive;
background = common.colorschemes.default.inactive;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactive;
childBorder = common.colorschemes.default.inactive;
};
unfocused = {
border = common.colorschemes.default.inactiveDark;
background = common.colorschemes.default.inactiveDark;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactiveDark;
childBorder = common.colorschemes.default.inactiveDark;
};
urgent = {
border = common.colorschemes.default.alert;
background = common.colorschemes.default.alert;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.black;
childBorder = common.colorschemes.default.alert;
};
placeholder = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
};
bars = [
{
command = "${pkgs.waybar}/bin/waybar";
}
];
};
extraConfig = ''
for_window [title="Firefox Sharing Indicator"] {
floating enable
}
for_window [title="Bluetooth Devices"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [title="Volume Control"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [app_id="nm-connection-editor" title="Network Connections"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [app_id="thunderbird" title="Reminder"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
set $ddterm-id dropdown-terminal
set $ddterm ${cfg.terminal} --class $ddterm-id
set $ddterm-resize resize set 100ppt 40ppt, move position 0 0
# resize/move new dropdown terminal windows
for_window [app_id="$ddterm-id"] {
floating enable
$ddterm-resize
move to scratchpad
scratchpad show
}
# show existing or start new dropdown terminal
bindsym ${cfg.modifier}+grave exec swaymsg '[app_id="$ddterm-id"] scratchpad show' || $ddterm && sleep .1 && swaymsg '[app_id="$ddterm-id"] $ddterm-resize'
bindsym ${cfg.modifier}+Escape exec swaymsg '[app_id="$ddterm-id"] scratchpad show' || $ddterm && sleep .1 && swaymsg '[app_id="$ddterm-id"] $ddterm-resize'
# ^-- resize again, case moving to different output
'';
};
}

View file

@ -0,0 +1,45 @@
{ ... }: {
services.kanshi = {
enable = true;
profiles = {
nomad = {
outputs = [
{
criteria = "LVDS-1";
status = "enable";
}
];
};
station = {
outputs = [
{
criteria = "LVDS-1";
status = "disable";
}
{
criteria = "Dell Inc. DELL U2515H 9X2VY5490XUL";
status = "enable";
mode = "1920x1080";
position = "0,0";
}
{
criteria = "Dell Inc. DELL U2515H 9X2VY5C7138L";
status = "enable";
mode = "1920x1080";
position = "1920,0";
}
{
criteria = "HJW VGA TO HDMI 0x00000100";
status = "enable";
mode = "1920x1080";
position = "3840,0";
}
];
};
};
};
}

View file

@ -0,0 +1,94 @@
{
"positionX": "right",
"positionY": "top",
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"fit-to-screen": true,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": false,
"hide-on-action": true,
"script-fail-notify": true,
"widgets": [
"mpris",
"volume",
"backlight",
"title",
"dnd",
"notifications"
],
"widget-config": {
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 1,
"text": "Notification Center"
},
"mpris": {
"image-size": 96,
"image-radius": 12
},
"volume": {
"label": "󰕾 "
},
"backlight": {
"label": "󰃟 "
},
"buttons-grid": {
"actions": [
{
"label": "󰐥",
"command": "systemctl poweroff"
},
{
"label": "󰜉",
"command": "systemctl reboot"
},
{
"label": "󰌾",
"command": "swaylock"
},
{
"label": "󰍃",
"command": "swaymsg exit"
},
{
"label": "󰏥",
"command": "systemctl suspend"
},
{
"label": "󰕾",
"command": "pactl set-sink-mute @DEFAULT_SINK@ toggle"
},
{
"label": "󰍬",
"command": "pactl set-source-mute @DEFAULT_SOURCE@ toggle"
},
{
"label": "󰖩",
"command": "iwgtk"
},
{
"label": "󰂯",
"command": "blueman-manager"
},
{
"label": "",
"command": "kooha"
}
]
}
}
}

View file

@ -0,0 +1,5 @@
{
imports = [
./swaync.nix
];
}

View file

@ -0,0 +1,340 @@
@define-color cc-bg rgba(0, 0, 0, 1);
@define-color noti-border-color rgba(255, 255, 255, 0.15);
@define-color noti-bg rgb(17, 17, 27);
@define-color noti-bg-darker rgb(43, 43, 57);
@define-color noti-bg-hover rgb(27, 27, 43);
@define-color noti-bg-focus rgba(27, 27, 27, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgba(169, 177, 214, 1);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);
* {
font-family: DejaVuSansM Nerd Font;
font-weight: bolder;
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
opacity: 1;
background: @noti-bg-darker
}
.notification-row {
outline: none;
}
.notification {
border-radius: 12px;
margin: 10px;
padding: 0;
border: 2px solid #7aa2f7
}
.notification-content {
background: transparent;
padding: 10px;
border-radius: 12px
}
.close-button {
background: @noti-close-bg;
color: @text-color;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 16px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all .15s ease-in-out;
border: none
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: none;
color: @text-color;
transition: all .15s ease-in-out
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover
}
.notification-default-action {
border-radius: 12px
}
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0
}
.notification-action {
border-radius: 0;
border-top: none;
border-right: none
}
.notification-action:first-child {
border-bottom-left-radius: 10px;
background: #1b1b2b
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
background: #1b1b2b
}
.inline-reply {
margin-top: 8px
}
.inline-reply-entry {
background: @noti-bg-darker;
color: @text-color;
caret-color: @text-color;
border: 1px solid @noti-border-color;
border-radius: 12px
}
.inline-reply-button {
margin-left: 4px;
background: @noti-bg;
border: 1px solid @noti-border-color;
border-radius: 12px;
color: @text-color
}
.inline-reply-button:disabled {
background: initial;
color: @text-color-disabled;
border: 1px solid transparent
}
.inline-reply-button:hover {
background: @noti-bg-hover
}
.body-image {
margin-top: 6px;
background-color: #fff;
border-radius: 12px
}
.summary {
font-size: 16px;
font-weight: 700;
background: transparent;
color: rgba(158, 206, 106, 1);
text-shadow: none
}
.time {
font-size: 16px;
font-weight: 700;
background: transparent;
color: @text-color;
text-shadow: none;
margin-right: 18px
}
.body {
font-size: 15px;
font-weight: 400;
background: transparent;
color: @text-color;
text-shadow: none
}
.control-center {
background: @cc-bg;
border: 1px solid #7aa2f7;
border-radius: 10px;
}
.control-center-list {
background: transparent
}
.control-center-list-placeholder {
opacity: .5
}
.floating-notifications {
background: transparent
}
.blank-window {
background: alpha(black, 0.25)
}
.widget-title {
color: @text-color;
margin: 10px;
font-size: 1.5rem
}
.widget-title>button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px
}
.widget-title>button:hover {
background: @noti-bg-hover
}
.widget-dnd {
color: @text-color;
margin: 10px;
font-size: 1.1rem
}
.widget-dnd>switch {
font-size: initial;
border-radius: 12px;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none
}
.widget-dnd>switch:checked {
background: @bg-selected
}
.widget-dnd>switch slider {
background: @noti-bg-hover;
border-radius: 12px
}
.widget-label {
margin: 10px;
}
.widget-label>label {
font-size: 1.5rem;
color: @text-color;
}
.widget-mpris {
color: @text-color;
background: @noti-bg-darker;
padding: 10px;
margin: 10px;
border-radius: 10px;
}
.widget-mpris-player {
padding: 8px;
margin: 8px
}
.widget-mpris-title {
font-weight: 700;
font-size: 1.25rem
}
.widget-mpris-subtitle {
font-size: 1.1rem
}
.widget-buttons-grid {
font-size: x-large;
padding: 8px;
margin: 20px 10px 10px;
border-radius: 12px;
background: @noti-bg-darker;
}
.widget-buttons-grid>flowbox>flowboxchild>button {
margin: 3px;
background: #343b58;
border-radius: 12px;
color: @text-color
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
/* background: @noti-bg-hover; */
color: rgba(158, 206, 106, 1)
}
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent
}
.topbar-buttons>button {
border: none;
background: transparent
}
.widget-volume {
background: @noti-bg-darker;
padding: 8px;
margin: 10px;
border-radius: 12px;
font-size: x-large;
color: @text-color
}
.widget-volume>box>button {
background: transparent;
border: none
}
.per-app-volume {
background-color: @noti-bg;
padding: 4px 8px 8px;
margin: 0 8px 8px;
border-radius: 12px
}
.widget-backlight {
background: @noti-bg-darker;
padding: 8px;
margin: 10px;
border-radius: 12px;
font-size: x-large;
color: @text-color
}
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem
}
.widget-inhibitors>button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px
}
.widget-inhibitors>button:hover {
background: @noti-bg-hover
}

View file

@ -0,0 +1,13 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
swaynotificationcenter
libnotify
];
xdg.configFile = {
"swaync/config.json".source = ./config.json;
"swaync/style.css".source = ./style.css;
};
}

View file

@ -0,0 +1,338 @@
{ pkgs, ... }: {
programs.waybar = {
enable = true;
settings.mainBar = {
layer = "top";
margin = "5 5 5 5";
modules-left = [ "sway/workspaces" "sway/window" "sway/mode" ];
modules-center = [ "clock" ];
modules-right = [ "tray" "network" "pulseaudio" "custom/mem" "temperature" "backlight" "battery" ];
"sway/workspaces" = {
disable-scroll = true;
persistent_workspaces = {
"1" = [ ];
"2" = [ ];
"3" = [ ];
"4" = [ ];
};
};
"sway/window" = {
format = "{title}";
max-length = 43;
};
"sway/mode" = {
format = "<span style=\"italic\">{}</span>";
};
clock = {
timezones = [ "Europe/Berlin" ];
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
format = "{:%a, %d %b, %H:%M}";
actions = {
on-click = "tz_up";
};
};
network = {
interval = 1;
format = "{ifname}";
format-wifi = "{signalStrength}% ";
format-ethernet = "eth 󰈁";
format-disconnected = "󰈂"; # An empty format will hide the module.
tooltip-format = "{ifname} via {gwaddr} 󰈁";
tooltip-format-wifi = "{essid} ({signalStrength}%) ";
tooltip-format-ethernet = "{ifname} ";
tooltip-format-disconnected = "Disconnected";
};
pulseaudio = {
reverse-scrolling = 1;
format = "{volume}% {icon} {format_source}";
format-bluetooth = "{volume}% {icon} {format_source}";
format-bluetooth-muted = "󰖁 {icon} {format_source}";
format-muted = "󰖁 {format_source}";
format-source = "{volume}% ";
format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "󰋎";
headset = "󰋎";
phone = "";
portable = "";
car = "";
default = [
"󰕿"
"󰖀"
"󰕾"
];
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
min-length = 13;
};
"custom/mem" = {
format = "{} 󰍛";
interval = 3;
exec = "free -h | awk '/Mem:/{printf $3}'";
tooltip = false;
};
temperature = {
critical-threshold = 80;
format = "{temperatureC}°C {icon}";
format-icons = [
""
""
""
""
""
];
tooltip = false;
};
backlight = {
device = "intel_backlight";
format = "{percent}% {icon}";
format-icons = [
"󰌶"
"󱩎"
"󱩏"
"󱩐"
"󱩑"
"󱩒"
"󱩓"
"󱩔"
"󱩕"
"󱩖"
"󰛨"
];
};
battery = {
states = {
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% ";
format-alt = "{time} {icon}";
format-icons = [
"󰂃"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
on-update = pkgs.writeShellScript "check-battery" ''
bat=/sys/class/power_supply/BAT0
CRIT=''${1:-15}
FILE=~/.config/waybar/.notified.target
stat=$(cat $bat/status)
perc=$(cat $bat/capacity)
if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
if [[ ! -f "$FILE" ]]; then
notify-send --urgency=critical --icon=dialog-warning "Battery Low" "Current charge: $perc%"
touch $FILE
fi
elif [[ -f "$FILE" ]]; then
rm $FILE
fi
'';
};
tray = {
icon-size = 16;
spacing = 0;
};
};
style = ''
@define-color bg-color #212529;
* {
border: none;
border-radius: 0;
font-family: DejaVuSansM Nerd Font;
min-height: 20px;
}
window#waybar {
background: transparent;
}
window#waybar.hidden {
opacity: 0.2;
}
#workspaces {
padding-left: 8px;
padding-right: 8px;
margin-right: 8px;
border-radius: 10px;
transition: none;
background: @bg-color;
}
#workspaces button {
transition: none;
color: #7c818c;
background: transparent;
padding: 5px;
font-size: 18px;
}
#workspaces button.persistent {
color: #7c818c;
font-size: 12px;
}
#workspaces button:hover {
transition: none;
box-shadow: inherit;
text-shadow: inherit;
border-radius: inherit;
color: @bg-color;
background: #7c818c;
}
#workspaces button.focused {
color: white;
}
#window {
padding-left: 16px;
padding-right: 16px;
margin-right: 8px;
border-radius: 10px 10px 10px 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#mode {
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#clock {
padding-left: 16px;
padding-right: 16px;
border-radius: 10px 10px 10px 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#network {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#pulseaudio {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#pulseaudio.muted {
background-color: #90b1b1;
color: #2a5c45;
}
#custom-mem {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#temperature {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#temperature.critical {
background-color: #eb4d4b;
}
#backlight {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#battery {
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
#battery.charging {
color: #ffffff;
background-color: #26A65B;
}
#battery.warning:not(.charging) {
background-color: #ffbe61;
color: black;
}
#battery.critical:not(.charging) {
background-color: #f53c3c;
color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#tray {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #ffffff;
background: @bg-color;
}
@keyframes blink {
to {
background-color: #ffffff;
color: #000000;
}
}
'';
};
}

View file

@ -0,0 +1,66 @@
{ pkgs, lib, ... }:
let
common = (import ../common.nix) { pkgs = pkgs; lib = lib; };
in
{
programs.wofi = {
enable = true;
settings = {
show = "drun";
allow_images = true;
image_size = 24;
no_actions = true;
};
style = ''
* {
font-family: '${common.font}', monospace;
font-size: ${common.font-size}px;
color: ${common.colorschemes.default.black};
}
window {
background-color: transparent;
}
#input {
background-color: ${common.colorschemes.default.active};
border: 5px;
border-color: ${common.colorschemes.default.activeDark};
border-radius: 0px;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 20px;
padding-right: 20px;
margin-bottom: 10px;
}
#scroll {
background-color: ${common.colorschemes.default.active};
border: 5px;
border-color: ${common.colorschemes.default.activeDark};
border-radius: 0px;
padding: 10px;
}
#entry {
padding: 10px;
}
#entry #text {
margin-left: 20px;
}
#entry:selected {
background-color: ${common.colorschemes.default.activeDark};
}
#entry:selected #img {
background-color: ${common.colorschemes.default.activeDark};
}
#entry:selected #text {
background-color: ${common.colorschemes.default.activeDark};
}
'';
};
}