feat: install hyprland from liminalOS
This commit is contained in:
parent
02701608a5
commit
f1bf204d3c
24 changed files with 1486 additions and 538 deletions
38
flake.lock
generated
38
flake.lock
generated
|
@ -1,22 +1,5 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"aq": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1736050555,
|
|
||||||
"narHash": "sha256-TUoKhJ2QMK2AYTRvBCRpYFmaSihiF/OgB+HDZjamZtI=",
|
|
||||||
"owner": "quantum9innovation",
|
|
||||||
"repo": "aquamarine",
|
|
||||||
"rev": "546ce7963d18cbd30b32bf8d464f9ab3f6d54f74",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "quantum9innovation",
|
|
||||||
"ref": "patch-125",
|
|
||||||
"repo": "aquamarine",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"base16": {
|
"base16": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"fromYaml": "fromYaml"
|
"fromYaml": "fromYaml"
|
||||||
|
@ -328,12 +311,26 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1745377448,
|
||||||
|
"narHash": "sha256-jhZDfXVKdD7TSEGgzFJQvEEZ2K65UMiqW5YJ2aIqxMA=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "507b63021ada5fee621b6ca371c4fca9ca46f52c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixvim": {
|
"nixvim": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixCats": "nixCats",
|
"nixCats": "nixCats",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"plugins-blink-ripgrep": "plugins-blink-ripgrep",
|
"plugins-blink-ripgrep": "plugins-blink-ripgrep",
|
||||||
"plugins-pomo-nvim": "plugins-pomo-nvim"
|
"plugins-pomo-nvim": "plugins-pomo-nvim"
|
||||||
},
|
},
|
||||||
|
@ -408,7 +405,6 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"aq": "aq",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"nixvim": "nixvim",
|
"nixvim": "nixvim",
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
};
|
};
|
||||||
nixvim = {
|
nixvim = {
|
||||||
url = "github:kaitotlex/vix1";
|
url = "github:kaitotlex/vix1";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
stylix = {
|
stylix = {
|
||||||
url = "github:danth/stylix";
|
url = "github:danth/stylix";
|
||||||
|
@ -31,10 +30,6 @@
|
||||||
url = "github:kaitotlex/wallpaper";
|
url = "github:kaitotlex/wallpaper";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
aq = {
|
|
||||||
url = "github:quantum9innovation/aquamarine/patch-125";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
|
|
|
@ -13,7 +13,11 @@
|
||||||
];
|
];
|
||||||
services.fprintd.enable = true;
|
services.fprintd.enable = true;
|
||||||
security.pam.services.login.fprintAuth = true;
|
security.pam.services.login.fprintAuth = true;
|
||||||
hardware.graphics.extraPackages = with pkgs; [ vaapiIntel intel-media-driver ];
|
hardware.graphics.extraPackages = with pkgs; [
|
||||||
|
vaapiIntel
|
||||||
|
intel-media-driver
|
||||||
|
];
|
||||||
|
hardware.graphics.enable32Bit = true;
|
||||||
hardware.opengl = {
|
hardware.opengl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
|
@ -25,7 +29,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware = {
|
hardware = {
|
||||||
graphics.enable32Bit = true;
|
|
||||||
pulseaudio.support32Bit = true;
|
pulseaudio.support32Bit = true;
|
||||||
openrazer.enable = true;
|
openrazer.enable = true;
|
||||||
};
|
};
|
||||||
|
@ -150,7 +153,7 @@
|
||||||
};
|
};
|
||||||
# Select internationalisation properties.
|
# Select internationalisation properties.
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedUDPPorts = [ 51820 ]; # Clients and peers can use the same port, see listenport
|
allowedUDPPorts = [ 51820 ]; # Clients and peers can use the same port, see listenport
|
||||||
};
|
};
|
||||||
# Enable WireGuard
|
# Enable WireGuard
|
||||||
|
@ -189,7 +192,7 @@ networking.firewall = {
|
||||||
# ];
|
# ];
|
||||||
# };
|
# };
|
||||||
# };
|
# };
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
i18n.extraLocaleSettings = {
|
i18n.extraLocaleSettings = {
|
||||||
LC_ADDRESS = "en_US.UTF-8";
|
LC_ADDRESS = "en_US.UTF-8";
|
||||||
|
|
|
@ -7,5 +7,6 @@
|
||||||
../../modules/audio
|
../../modules/audio
|
||||||
../../modules/stylix
|
../../modules/stylix
|
||||||
../../modules/electrical
|
../../modules/electrical
|
||||||
|
../../modules/desktop-environment
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
|
||||||
../graphics
|
|
||||||
];
|
|
||||||
# Enable the X11 windowing system.
|
# Enable the X11 windowing system.
|
||||||
# You can disable this if you're only using the Wayland session.
|
# You can disable this if you're only using the Wayland session.
|
||||||
services.xserver.enable = false;
|
services.xserver.enable = false;
|
||||||
|
|
64
modules/desktop-environment/default.nix
Normal file
64
modules/desktop-environment/default.nix
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.liminalOS.desktop = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the liminalOS desktop environment.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
hyprland.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = cfg.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to enable Hyprland. Sets up a default configuration at the system and user level, and installs xdg-desktop-portal-gtk.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
options.liminalOS.formFactor = lib.mkOption {
|
||||||
|
type = lib.types.nullOr (
|
||||||
|
lib.types.enum [
|
||||||
|
"laptop"
|
||||||
|
"desktop"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
default = "desktop";
|
||||||
|
description = ''
|
||||||
|
Form factor of the machine. Adjusts some UI settings.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
options.liminalOS.powersave = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to set some options to reduce power consumption (mostly Hyprland).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
xdg.portal = lib.mkIf cfg.hyprland.enable {
|
||||||
|
enable = true;
|
||||||
|
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.hyprland.enable = cfg.hyprland.enable;
|
||||||
|
|
||||||
|
services.xserver.enable = false;
|
||||||
|
|
||||||
|
services.xserver = {
|
||||||
|
xkb.layout = "us";
|
||||||
|
xkb.variant = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
cfg = config.hardware.nvidia;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.hardware.nvidia.usePatchedAquamarine = lib.mkEnableOption "q9i's patched aquamarine with working sleep on Nvidia";
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.usePatchedAquamarine {
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
aquamarine = prev.aquamarine.overrideAttrs {
|
|
||||||
src = inputs.aq;
|
|
||||||
version = inputs.aq.rev;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./sway
|
|
||||||
./waybar
|
|
||||||
#./rofi
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
{
|
|
||||||
wayland.windowManager.sway = {
|
|
||||||
enable = true;
|
|
||||||
config = rec {
|
|
||||||
terminal = "kitty";
|
|
||||||
modifier = "Mod4";
|
|
||||||
menu = "rofi -show combi";
|
|
||||||
#lock = "swaylock";
|
|
||||||
bars = [
|
|
||||||
{
|
|
||||||
command = "waybar";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
gaps = {
|
|
||||||
inner = 12;
|
|
||||||
};
|
|
||||||
# colors = {
|
|
||||||
# focused = {
|
|
||||||
# background = "#191724";
|
|
||||||
# border = "#6e6a86";
|
|
||||||
# childBorder = "#6e6a86";
|
|
||||||
# indicator = "#26233a";
|
|
||||||
# text = "#e0def4";
|
|
||||||
# };
|
|
||||||
# focusedInactive = {
|
|
||||||
# background = "#797593";
|
|
||||||
# border = "#393552";
|
|
||||||
# childBorder = "#393552";
|
|
||||||
# indicator = "#ea9d34";
|
|
||||||
# text = "#e0def4";
|
|
||||||
# };
|
|
||||||
# placeholder = {
|
|
||||||
# background = "#1f1d2e";
|
|
||||||
# border = "#000000";
|
|
||||||
# childBorder = "#9893a5";
|
|
||||||
# indicator = "#000000";
|
|
||||||
# text = "#e0def4";
|
|
||||||
# };
|
|
||||||
# unfocused = {
|
|
||||||
# background = "#1f1d2e";
|
|
||||||
# border = "#1f1d2e";
|
|
||||||
# childBorder = "#1f1d2e";
|
|
||||||
# indicator = "#797593";
|
|
||||||
# text = "#e0def4";
|
|
||||||
# };
|
|
||||||
# urgent = {
|
|
||||||
# background = "#2a273f";
|
|
||||||
# border = "#ea9a97";
|
|
||||||
# childBorder = "#ea9a97";
|
|
||||||
# indicator = "#1f1d2e";
|
|
||||||
# text = "#e0def4";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
window = {
|
|
||||||
border = 3;
|
|
||||||
titlebar = false;
|
|
||||||
};
|
|
||||||
# startup = [
|
|
||||||
# {
|
|
||||||
# always = true;
|
|
||||||
# command = "swaybg -i /home/kaitotlex/Pictures/eff.png";
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
};
|
|
||||||
xwayland = true;
|
|
||||||
extraConfig = ''
|
|
||||||
bindsym XF86AudioRaiseVolume exec pamixer -i 5
|
|
||||||
bindsym XF86AudioLowerVolume exec pamixer -d 5
|
|
||||||
bindsym XF86AudioMute exec pamixer -t
|
|
||||||
bindsym XF86MonBrightnessUp exec brightnessctl s 5%+
|
|
||||||
bindsym XF86MonBrightnessDown exec brightnessctl s 5%-
|
|
||||||
bindsym XF86AudioMicMute exec spotify
|
|
||||||
input "type:touchpad" {
|
|
||||||
natural_scroll enabled
|
|
||||||
tap enabled # enables click-on-tap
|
|
||||||
tap_button_map lrm # tap with 1 finger = left click, 2 fingers = right click, 3 fingers = middle click
|
|
||||||
#dwt enabled # disable (touchpad) while typing
|
|
||||||
}
|
|
||||||
bindsym XF86KbdBrightnessDown exec brightnessctl -d asus::kbd_backlight s 1-
|
|
||||||
bindsym XF86KbdBrightnessUp exec brightnessctl -d asus::kbd_backlight s +1
|
|
||||||
bindsym XF86Tools exec brightnessctl s 0
|
|
||||||
bindsym XF86WebCam exec systemctl sleep
|
|
||||||
bindsym Prior exec playerctl previous
|
|
||||||
bindsym Next exec playerctl next
|
|
||||||
bindsym XF86RotateWindows exec playerctl play-pause
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,172 +0,0 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
style = ./style.css;
|
|
||||||
settings = {
|
|
||||||
mainBar = {
|
|
||||||
name = "bar0";
|
|
||||||
|
|
||||||
layer = "top";
|
|
||||||
position = "top";
|
|
||||||
|
|
||||||
height = 28;
|
|
||||||
# "width" = 1920;
|
|
||||||
|
|
||||||
"margin" = "5px 10px 0px 10px";
|
|
||||||
"spacing" = 10;
|
|
||||||
|
|
||||||
"mode" = "top";
|
|
||||||
# "exclusive" = true;
|
|
||||||
|
|
||||||
# "output" = "eDP-1";
|
|
||||||
|
|
||||||
reload_style_on_change = true;
|
|
||||||
|
|
||||||
modules-left = [
|
|
||||||
"sway/workspaces"
|
|
||||||
"sway/window"
|
|
||||||
];
|
|
||||||
modules-right = [
|
|
||||||
"tray"
|
|
||||||
"idle_inhibitor"
|
|
||||||
"backlight"
|
|
||||||
"wireplumber"
|
|
||||||
"network"
|
|
||||||
"battery"
|
|
||||||
"disk"
|
|
||||||
"memory"
|
|
||||||
"cpu"
|
|
||||||
"temperature"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
|
|
||||||
idle_inhibitor = {
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
activated = " ";
|
|
||||||
deactivated = " ";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
network = {
|
|
||||||
format = "{ifname}";
|
|
||||||
format-wifi = "{icon}{essid}";
|
|
||||||
format-ethernet = " {essid}";
|
|
||||||
format-disconnected = " Disconnected";
|
|
||||||
format-icons = [
|
|
||||||
" "
|
|
||||||
" "
|
|
||||||
" "
|
|
||||||
];
|
|
||||||
tooltip-format = " {bandwidthUpBits} | {bandwidthDownBits}";
|
|
||||||
tooltip-format-wifi = " {bandwidthUpBits} | {bandwidthDownBits} | {signalStrength}";
|
|
||||||
};
|
|
||||||
|
|
||||||
backlight = {
|
|
||||||
interval = 2;
|
|
||||||
format = " {percent}%";
|
|
||||||
on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl -d amdgpu_bl2 set 10%";
|
|
||||||
on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl -d amdgpu_bl2 set 10%-";
|
|
||||||
};
|
|
||||||
|
|
||||||
wireplumber = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
format-muted = " ";
|
|
||||||
on-click = "pamixer -t";
|
|
||||||
on-scroll-up = "${pkgs.pamixer}/bin/pamixer set 5%+";
|
|
||||||
on-scroll-down = "${pkgs.pamixer}/bin/pamixer set 5%-";
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
battery = {
|
|
||||||
interval = 10;
|
|
||||||
format = "{icon} {capacity}%";
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
tooltip = true;
|
|
||||||
tooltip-format = "{timeTo}";
|
|
||||||
};
|
|
||||||
|
|
||||||
disk = {
|
|
||||||
intervel = 30;
|
|
||||||
format = " {percentage_used}%";
|
|
||||||
tooltip-format = "{used} used out of {total} on \"{path}\" ({percentage_used}%)";
|
|
||||||
};
|
|
||||||
|
|
||||||
memory = {
|
|
||||||
interval = 10;
|
|
||||||
format = " {used}";
|
|
||||||
tooltip-format = "{used}GiB used of {total}GiB ({percentage}%)";
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu = {
|
|
||||||
interval = 10;
|
|
||||||
format = " {usage}%";
|
|
||||||
};
|
|
||||||
|
|
||||||
temperature = {
|
|
||||||
interval = 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
clock = {
|
|
||||||
interval = 1;
|
|
||||||
format = "{:%H:%M:%S}";
|
|
||||||
};
|
|
||||||
|
|
||||||
"hyprland/workspaces" = {
|
|
||||||
show-special = true;
|
|
||||||
persistent-workspaces = {
|
|
||||||
"*" = [
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
4
|
|
||||||
5
|
|
||||||
6
|
|
||||||
7
|
|
||||||
8
|
|
||||||
9
|
|
||||||
10
|
|
||||||
];
|
|
||||||
};
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
active = "";
|
|
||||||
empty = "";
|
|
||||||
default = "";
|
|
||||||
urgent = "";
|
|
||||||
special = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"hyprland/window" = {
|
|
||||||
icon = true;
|
|
||||||
icon-size = 20;
|
|
||||||
max-length = 50;
|
|
||||||
rewrite = {
|
|
||||||
"(.*) — firefox" = "$1";
|
|
||||||
"(.*) — chromium" = "$1";
|
|
||||||
"^$" = "👾";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
@define-color bg #2E3440;
|
|
||||||
/*@define-color bg #353C4A;*/
|
|
||||||
@define-color light #D8DEE9;
|
|
||||||
/*@define-color dark @nord_dark_font;*/
|
|
||||||
@define-color warning #ebcb8b;
|
|
||||||
@define-color critical #BF616A;
|
|
||||||
@define-color mode #434C5E;
|
|
||||||
/*@define-color workspaces @bg;*/
|
|
||||||
/*@define-color workspaces @nord_dark_font;*/
|
|
||||||
/*@define-color workspacesfocused #434C5E;*/
|
|
||||||
@define-color workspacesfocused #4C566A;
|
|
||||||
@define-color tray @workspacesfocused;
|
|
||||||
@define-color sound #EBCB8B;
|
|
||||||
@define-color network #5D7096;
|
|
||||||
@define-color memory #546484;
|
|
||||||
@define-color cpu #596A8D;
|
|
||||||
@define-color temp #4D5C78;
|
|
||||||
@define-color layout #5e81ac;
|
|
||||||
@define-color battery #88c0d0;
|
|
||||||
@define-color date #434C5E;
|
|
||||||
@define-color time #434C5E;
|
|
||||||
@define-color backlight #434C5E;
|
|
||||||
@define-color nord_bg #434C5E;
|
|
||||||
@define-color nord_bg_blue #546484;
|
|
||||||
@define-color nord_light #D8DEE9;
|
|
||||||
@define-color nord_light_font #D8DEE9;
|
|
||||||
@define-color nord_dark_font #434C5E;
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* Variant: Rosé Pine Dawn
|
|
||||||
* Maintainer: DankChoir
|
|
||||||
*/
|
|
||||||
|
|
||||||
@define-color base #faf4ed;
|
|
||||||
@define-color surface #fffaf3;
|
|
||||||
@define-color overlay #f2e9e1;
|
|
||||||
|
|
||||||
@define-color muted #9893a5;
|
|
||||||
@define-color subtle #797593;
|
|
||||||
@define-color text #575279;
|
|
||||||
|
|
||||||
@define-color love #b4637a;
|
|
||||||
@define-color gold #ea9d34;
|
|
||||||
@define-color rose #d7827e;
|
|
||||||
@define-color pine #286983;
|
|
||||||
@define-color foam #56949f;
|
|
||||||
@define-color iris #907aa9;
|
|
||||||
|
|
||||||
@define-color highlightLow #f4ede8;
|
|
||||||
@define-color highlightMed #dfdad9;
|
|
||||||
@define-color highlightHigh #cecacd;
|
|
|
@ -1,75 +0,0 @@
|
||||||
@import "./nord.css";
|
|
||||||
window#waybar {
|
|
||||||
font-family: "CaskaydiaCove Nerd Font";
|
|
||||||
background-color: @bg;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left {
|
|
||||||
opacity: 1;
|
|
||||||
background-color: #95a3bb;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-center {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-right {
|
|
||||||
opacity: 1;
|
|
||||||
background-color: #95a3bb;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px 2px 2px 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
/* label.module {
|
|
||||||
margin-left: -1px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
#workspaces {
|
|
||||||
background-color: #6e7581;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 0 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
font-size: 0.6rem;
|
|
||||||
padding: 0 0.3rem 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
background-color: #95a3bb;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 0 3px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery {
|
|
||||||
color: @date;
|
|
||||||
}
|
|
||||||
|
|
||||||
#memory {
|
|
||||||
color: @memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
#disk {
|
|
||||||
color: @date;
|
|
||||||
}
|
|
||||||
|
|
||||||
#cpu {
|
|
||||||
color: @cpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature {
|
|
||||||
color: @temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
color: @network;
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
@import "./rose-pine-dawn.css";
|
|
||||||
window#waybar {
|
|
||||||
font-family: "CaskaydiaCove Nerd Font";
|
|
||||||
background-color: @base;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left {
|
|
||||||
opacity: 1;
|
|
||||||
background: linear-gradient(45deg, @muted, @subtle);
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-center {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-right {
|
|
||||||
opacity: 1;
|
|
||||||
background-color: @subtle;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px 2px 2px 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
/* label.module {
|
|
||||||
margin-left: -1px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
#workspaces {
|
|
||||||
background-color: @rose;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 0 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
font-size: 0.6rem;
|
|
||||||
padding: 0 0.3rem 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
background-color: @iris;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
padding: 0 3px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery {
|
|
||||||
color: @foam;
|
|
||||||
}
|
|
||||||
|
|
||||||
#memory {
|
|
||||||
color: @iris;
|
|
||||||
}
|
|
||||||
|
|
||||||
#disk {
|
|
||||||
color: @gold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#cpu {
|
|
||||||
color: @rose;
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature {
|
|
||||||
color: @foam;
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
color: @rose;
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
imports = [
|
imports = [
|
||||||
./home.nix
|
./home.nix
|
||||||
./spicetify.nix
|
./spicetify.nix
|
||||||
./de
|
|
||||||
./stylix
|
./stylix
|
||||||
|
./desktop-environment
|
||||||
];
|
];
|
||||||
|
|
||||||
|
liminalOS.formFactor = "desktop";
|
||||||
|
liminalOS.powersave = false;
|
||||||
}
|
}
|
||||||
|
|
22
users/kaitotlex/desktop-environment/default.nix
Normal file
22
users/kaitotlex/desktop-environment/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
osConfig,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprland
|
||||||
|
./waybar
|
||||||
|
./swaync.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options.liminalOS.desktop = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = osConfig.liminalOS.desktop.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the default configuration for the userland portions of the liminalOS desktop environment.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
95
users/kaitotlex/desktop-environment/hyprland/binds.nix
Normal file
95
users/kaitotlex/desktop-environment/hyprland/binds.nix
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop.hyprland;
|
||||||
|
hyprnome = "${pkgs.hyprnome}/bin/hyprnome";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = lib.mkIf cfg.enable {
|
||||||
|
bind = [
|
||||||
|
"$mod+Shift, $Left, scroller:movewindow, l"
|
||||||
|
"$mod+Shift, $Right, scroller:movewindow, r"
|
||||||
|
"$mod+Shift, $Up, scroller:movewindow, u"
|
||||||
|
"$mod+Shift, $Down, scroller:movewindow, d"
|
||||||
|
|
||||||
|
# Move around
|
||||||
|
"$mod, $Left, scroller:movefocus, l"
|
||||||
|
"$mod, $Right, scroller:movefocus, r"
|
||||||
|
"$mod, $Up, scroller:movefocus, u"
|
||||||
|
"$mod, $Down, scroller:movefocus, d"
|
||||||
|
"$mod, comma, scroller:admitwindow"
|
||||||
|
"$mod, period, scroller:expelwindow"
|
||||||
|
"$mod, F, scroller:fitsize, active"
|
||||||
|
"$mod, Y, scroller:fitsize, all"
|
||||||
|
"$mod, semicolon, scroller:cyclesize, next"
|
||||||
|
"$mod, apostrophe, scroller:cyclesize, previous"
|
||||||
|
|
||||||
|
"$mod+Shift, U, exec, ${hyprnome} --move"
|
||||||
|
"$mod+Shift, I, exec, ${hyprnome} --previous --move"
|
||||||
|
|
||||||
|
"$mod, U, exec, ${hyprnome}"
|
||||||
|
"$mod, I, exec, ${hyprnome} --previous"
|
||||||
|
|
||||||
|
"$mod, C, scroller:setmode, c"
|
||||||
|
"$mod, V, scroller:setmode, r"
|
||||||
|
|
||||||
|
"$mod, G, scroller:jump"
|
||||||
|
"$mod+Ctrl, G, scroller:toggleoverview"
|
||||||
|
# Window actions
|
||||||
|
"$mod, Q, killactive"
|
||||||
|
"$mod, W, togglefloating"
|
||||||
|
"$mod, Return, fullscreen"
|
||||||
|
|
||||||
|
# Utilities
|
||||||
|
"$mod, Space, exec, pkill -x rofi || rofi -show drun" # Run rofi application launcher
|
||||||
|
"$mod, X, exec, pkill -x rofi || rofi -show window" # Run rofi window switcher
|
||||||
|
|
||||||
|
"$mod, Backspace, exec, pkill -x wlogout || wlogout" # show logout menu
|
||||||
|
|
||||||
|
"$mod, Z, exec, loginctl lock-session"
|
||||||
|
|
||||||
|
# Media controls
|
||||||
|
",XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer -t"
|
||||||
|
",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox play-pause"
|
||||||
|
",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox next"
|
||||||
|
",XF86AudioRewind, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox previous"
|
||||||
|
|
||||||
|
"$mod, S, togglespecialworkspace"
|
||||||
|
"$mod+Alt, S, movetoworkspacesilent, special"
|
||||||
|
"$mod, Tab, workspace, previous"
|
||||||
|
''$mod+Shift, P, exec, ${pkgs.grim}/bin/grim - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot full screen
|
||||||
|
''$mod, P, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
|
||||||
|
|
||||||
|
"$mod, B, exec, zen"
|
||||||
|
|
||||||
|
"$mod, N, exec, sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
|
||||||
|
# Application Keybinds
|
||||||
|
"$mod, R, exec, ${pkgs.pavucontrol}/bin/pavucontrol -t 3" # open pavucontrol on 'outputs' tab
|
||||||
|
"$mod, T, exec, ${pkgs.kitty}/bin/kitty"
|
||||||
|
"$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar"
|
||||||
|
"$mod, M, exec, ${pkgs.thunderbird}/bin/thunderbird"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [
|
||||||
|
"$mod, mouse:272, movewindow"
|
||||||
|
"$mod, mouse:273, resizewindow"
|
||||||
|
];
|
||||||
|
bindel = [
|
||||||
|
",XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
|
||||||
|
",XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%+"
|
||||||
|
",XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer -i 5"
|
||||||
|
",XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer -d 5"
|
||||||
|
];
|
||||||
|
binde = [
|
||||||
|
# Resize windows
|
||||||
|
"$mod+Alt, $Right, resizeactive, 30 0"
|
||||||
|
"$mod+Alt, $Left, resizeactive, -30 0"
|
||||||
|
"$mod+Alt, $Up, resizeactive, 0 -30"
|
||||||
|
"$mod+Alt, $Down, resizeactive, 0 30"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
242
users/kaitotlex/desktop-environment/hyprland/default.nix
Normal file
242
users/kaitotlex/desktop-environment/hyprland/default.nix
Normal file
|
@ -0,0 +1,242 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./binds.nix
|
||||||
|
./utilities.nix
|
||||||
|
./windowrules.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options.liminalOS.formFactor = lib.mkOption {
|
||||||
|
type = lib.types.nullOr (
|
||||||
|
lib.types.enum [
|
||||||
|
"laptop"
|
||||||
|
"desktop"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
default = osConfig.liminalOS.formFactor;
|
||||||
|
description = ''
|
||||||
|
Form factor of the machine. Adjusts some UI settings.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
options.liminalOS.powersave = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = osConfig.liminalOS.powersave;
|
||||||
|
description = ''
|
||||||
|
Whether to set some options to reduce power consumption (mostly Hyprland).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
options.liminalOS.desktop.hyprland = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = config.liminalOS.desktop.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to enable and rice Hyprland as well as some basic desktop utilities.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
gtkUseOpenGL = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to set GSK_RENDERER environment variable to stop GTK apps from crashing.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
idleDaemon.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = cfg.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to setup and enable Hypridle with some defaults to automatically lock the screen and suspend after idling.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
screenlocker.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = cfg.enable && cfg.idleDaemon.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to set up Hyprlock for screen locking.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
screenlocker.useCrashFix = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to use a workaround for Hyprlock background blur not working on some machines. Before locking, a screenshot will be taken and placed at `/tmp/__hyprlock-monitor-screenshot.png`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
screenlocker.monitor = lib.mkOption {
|
||||||
|
type = lib.types.nullOr lib.types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Monitor to use for screen locker. Use `hyprctl monitors` to determine.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
bluelight.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Whether to enable `hyprsunset` as a daemon.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
wl-clipboard
|
||||||
|
libsForQt5.qtstyleplugin-kvantum
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
papirus-icon-theme
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
hyprland-qtutils
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
plugins = [
|
||||||
|
(pkgs.hyprlandPlugins.hyprscroller.overrideAttrs {
|
||||||
|
version = "0-unstable-2025-03-28";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "dawsers";
|
||||||
|
repo = "hyprscroller";
|
||||||
|
rev = "3f86916f3e9a583154b1be0af4e8a1ef1f7435b2";
|
||||||
|
hash = "sha256-mgYq3vc4JtIzVuAKTWdALOynImYyNZEXh7tiVPvMZg4=";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
settings = {
|
||||||
|
exec-once = [
|
||||||
|
"hyprctl dispatch workspace 100000"
|
||||||
|
];
|
||||||
|
"$mod" = "SUPER";
|
||||||
|
"$Left" = "H";
|
||||||
|
"$Right" = "L";
|
||||||
|
"$Up" = "K";
|
||||||
|
"$Down" = "J";
|
||||||
|
env = (
|
||||||
|
lib.optionals cfg.gtkUseOpenGL [
|
||||||
|
"GSK_RENDERER,ngl"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
layerrule = [
|
||||||
|
"blur,rofi"
|
||||||
|
"ignorezero,rofi"
|
||||||
|
"animation slide bottom 0.2 0.2 wind,rofi"
|
||||||
|
"blur,notifications"
|
||||||
|
"ignorezero,notifications"
|
||||||
|
"blur,swaync-notification-window"
|
||||||
|
"animation slide right 0.5 0.5,swaync-control-center"
|
||||||
|
"animation slide right 0.5 0.5,notifications"
|
||||||
|
"animation slide right 0.5 0.5,swaync-notification-window"
|
||||||
|
"ignorezero,swaync-notification-window"
|
||||||
|
"blur,swaync-control-center"
|
||||||
|
"ignorezero,swaync-control-center"
|
||||||
|
"blur,logout_dialog"
|
||||||
|
];
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = "yes";
|
||||||
|
preserve_split = "yes";
|
||||||
|
};
|
||||||
|
animations = {
|
||||||
|
enabled = "yes";
|
||||||
|
bezier = [
|
||||||
|
"wind, 0.05, 0.9, 0.1, 1.05"
|
||||||
|
"winIn, 0.1, 1.1, 0.1, 1.1"
|
||||||
|
"winOut, 0.3, -0.3, 0, 1"
|
||||||
|
"liner, 1, 1, 1, 1"
|
||||||
|
"windup, 0.05, 0.9, 0.1, 1.05"
|
||||||
|
];
|
||||||
|
animation =
|
||||||
|
[
|
||||||
|
"windows, 1, 6, wind, slide"
|
||||||
|
"windowsIn, 1, 6, winIn, slide"
|
||||||
|
"windowsOut, 1, 5, winOut, slide"
|
||||||
|
"windowsMove, 1, 5, wind, slide"
|
||||||
|
"fade, 1, 10, default"
|
||||||
|
# "layers, 1, 8, default, slide"
|
||||||
|
"workspaces, 1, 5, wind, slidefadevert"
|
||||||
|
]
|
||||||
|
++ (lib.optionals (!osConfig.liminalOS.powersave) [
|
||||||
|
"border, 1, 1, liner"
|
||||||
|
"borderangle, 1, 30, liner, loop"
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
general =
|
||||||
|
let
|
||||||
|
inherit (config.lib.stylix) colors;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
gaps_in = "3";
|
||||||
|
gaps_out = "8";
|
||||||
|
border_size = "2";
|
||||||
|
# "col.active_border" = pkgs.lib.mkForce "rgba(ca9ee6ff) rgba(f2d5cfff) 45deg";
|
||||||
|
# "col.inactive_border" = pkgs.lib.mkForce "rgba(b4befecc) rgba(6c7086cc) 45deg";
|
||||||
|
"col.active_border" = "rgba(${colors.base0A}ff) rgba(${colors.base09}ff) 45deg";
|
||||||
|
"col.inactive_border" = "rgba(${colors.base01}cc) rgba(${colors.base02}cc) 45deg";
|
||||||
|
layout = "scroller";
|
||||||
|
resize_on_border = "true";
|
||||||
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
disable_splash_rendering = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor = {
|
||||||
|
hide_on_key_press = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = "10";
|
||||||
|
dim_special = "0.3";
|
||||||
|
blur = {
|
||||||
|
enabled = "yes";
|
||||||
|
size = "6";
|
||||||
|
passes = "3";
|
||||||
|
new_optimizations = "on";
|
||||||
|
ignore_opacity = "on";
|
||||||
|
xray = "false";
|
||||||
|
special = true;
|
||||||
|
};
|
||||||
|
shadow = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
input = {
|
||||||
|
sensitivity = if config.liminalOS.formFactor == "laptop" then "0.0" else "-0.65";
|
||||||
|
};
|
||||||
|
plugin.scroller = {
|
||||||
|
column_widths = "onethird onehalf twothirds one";
|
||||||
|
column_heights = "onethird onehalf twothirds one";
|
||||||
|
};
|
||||||
|
experimental.xx_color_management_v4 = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.input.touchpad =
|
||||||
|
lib.mkIf (config.liminalOS.formFactor == "laptop")
|
||||||
|
{
|
||||||
|
natural_scroll = true;
|
||||||
|
disable_while_typing = true;
|
||||||
|
clickfinger_behavior = true;
|
||||||
|
tap-to-click = false;
|
||||||
|
scroll_factor = 0.15;
|
||||||
|
};
|
||||||
|
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion =
|
||||||
|
!cfg.screenlocker.useCrashFix || (cfg.screenlocker.useCrashFix && cfg.screenlocker.monitor != null);
|
||||||
|
message = "To use the Nvidia crash fix, you must set screenlocker.monitor to the monitor you want to use as the lock screen that blurs! Use `hyprctl monitors` to determine the monitor codes (should be something like DP-1, HDMI-A-1, etc).";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
183
users/kaitotlex/desktop-environment/hyprland/utilities.nix
Normal file
183
users/kaitotlex/desktop-environment/hyprland/utilities.nix
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop.hyprland;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
systemd.user.services = lib.mkIf cfg.bluelight.enable {
|
||||||
|
hyprsunset = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Start the hyprsunset daemon";
|
||||||
|
PartOf = "hyprland-session.target";
|
||||||
|
After = "hyprland-session.target";
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.hyprsunset}/bin/hyprsunset";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 3;
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "hyprland-session.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.hyprpaper.enable = true;
|
||||||
|
|
||||||
|
programs.wlogout.enable = true;
|
||||||
|
|
||||||
|
programs.rofi = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.rofi-wayland;
|
||||||
|
terminal = "${pkgs.kitty}/bin/kitty";
|
||||||
|
theme =
|
||||||
|
let
|
||||||
|
inherit (config.lib.formats.rasi) mkLiteral;
|
||||||
|
mkRgba =
|
||||||
|
opacity: color:
|
||||||
|
let
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
r = c."${color}-rgb-r";
|
||||||
|
g = c."${color}-rgb-g";
|
||||||
|
b = c."${color}-rgb-b";
|
||||||
|
in
|
||||||
|
mkLiteral "rgba ( ${r}, ${g}, ${b}, ${opacity} % )";
|
||||||
|
mkRgb = mkRgba "100";
|
||||||
|
rofiOpacity = builtins.toString (builtins.ceil (config.stylix.opacity.popups * 100));
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"*" = {
|
||||||
|
font = "${config.stylix.fonts.monospace.name} ${toString config.stylix.fonts.sizes.popups}";
|
||||||
|
text-color = mkRgb "base05";
|
||||||
|
background-color = mkRgba rofiOpacity "base00";
|
||||||
|
};
|
||||||
|
"window" = {
|
||||||
|
height = mkLiteral "20em";
|
||||||
|
width = mkLiteral "30em";
|
||||||
|
border-radius = mkLiteral "8px";
|
||||||
|
border-width = mkLiteral "2px";
|
||||||
|
padding = mkLiteral "1.5em";
|
||||||
|
};
|
||||||
|
"mainbox" = {
|
||||||
|
background-color = mkRgba rofiOpacity "base01";
|
||||||
|
};
|
||||||
|
"inputbar" = {
|
||||||
|
margin = mkLiteral "0 0 1em 0";
|
||||||
|
};
|
||||||
|
"prompt" = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
"entry" = {
|
||||||
|
placeholder = "Search...";
|
||||||
|
padding = mkLiteral "1em 1em";
|
||||||
|
text-color = mkRgb "base05";
|
||||||
|
background-color = mkRgba rofiOpacity "base00";
|
||||||
|
border-radius = mkLiteral "8px";
|
||||||
|
};
|
||||||
|
"element-text" = {
|
||||||
|
padding = mkLiteral "0.5em 1em";
|
||||||
|
margin = mkLiteral "0 0.5em";
|
||||||
|
};
|
||||||
|
"element-icon" = {
|
||||||
|
size = mkLiteral "3ch";
|
||||||
|
};
|
||||||
|
"element-text selected" = {
|
||||||
|
background-color = mkRgba rofiOpacity "base0A";
|
||||||
|
text-color = mkRgb "base01";
|
||||||
|
border-radius = mkLiteral "8px";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.swayosd.enable = true;
|
||||||
|
|
||||||
|
programs.hyprlock = lib.mkIf cfg.screenlocker.enable {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
hide_cursor = true;
|
||||||
|
grace = 0;
|
||||||
|
};
|
||||||
|
background = {
|
||||||
|
monitor = cfg.screenlocker.monitor;
|
||||||
|
path =
|
||||||
|
if cfg.screenlocker.useCrashFix then "/tmp/__hyprlock-monitor-screenshot.png" else "screenshot";
|
||||||
|
blur_passes = 3;
|
||||||
|
blur_size = 7;
|
||||||
|
noise = 0.0117;
|
||||||
|
contrast = 0.8916;
|
||||||
|
brightness = 0.8172;
|
||||||
|
vibrancy = 0.1696;
|
||||||
|
vibrancy_darkness = 0.0;
|
||||||
|
};
|
||||||
|
input-field = {
|
||||||
|
monitor = "";
|
||||||
|
size = "200, 50";
|
||||||
|
outline_thickness = 3;
|
||||||
|
dots_size = 0.33;
|
||||||
|
dots_spacing = 0.15;
|
||||||
|
dots_center = false;
|
||||||
|
dots_rounding = -1;
|
||||||
|
outer_color = "rgb(151515)";
|
||||||
|
inner_color = "rgb(200, 200, 200)";
|
||||||
|
font_color = "rgb(10, 10, 10)";
|
||||||
|
fade_on_empty = true;
|
||||||
|
fade_timeout = 1000;
|
||||||
|
placeholder_text = "<i>Input Password...</i>";
|
||||||
|
hide_input = false;
|
||||||
|
rounding = -1;
|
||||||
|
check_color = "rgb(204, 136, 34)";
|
||||||
|
fail_color = "rgb(204, 34, 34)";
|
||||||
|
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
|
||||||
|
fail_timeout = 2000;
|
||||||
|
fail_transition = 300;
|
||||||
|
capslock_color = -1;
|
||||||
|
numlock_color = -1;
|
||||||
|
bothlock_color = -1;
|
||||||
|
invert_numlock = false;
|
||||||
|
swap_font_color = false;
|
||||||
|
|
||||||
|
position = "0, -20";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.hypridle = lib.mkIf cfg.idleDaemon.enable {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
lock_cmd =
|
||||||
|
if cfg.screenlocker.useCrashFix then
|
||||||
|
"pidof hyprlock || ${pkgs.grim}/bin/grim -o ${config.programs.hyprlock.settings.background.monitor} /tmp/__hyprlock-monitor-screenshot.png && ${pkgs.hyprlock}/bin/hyprlock"
|
||||||
|
else
|
||||||
|
"pidof hyprlock || hyprlock";
|
||||||
|
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||||
|
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||||
|
};
|
||||||
|
listener = [
|
||||||
|
{
|
||||||
|
timeout = 1500;
|
||||||
|
on-timeout = "loginctl lock-session";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 330; # 5.5min
|
||||||
|
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||||
|
on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 1800;
|
||||||
|
on-timeout = "systemctl suspend";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
95
users/kaitotlex/desktop-environment/hyprland/windowrules.nix
Normal file
95
users/kaitotlex/desktop-environment/hyprland/windowrules.nix
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
{
|
||||||
|
config.wayland.windowManager.hyprland.settings.windowrulev2 =
|
||||||
|
lib.mkIf config.liminalOS.desktop.hyprland.enable
|
||||||
|
[
|
||||||
|
"opacity 0.90 0.90,class:^(librewolf)$"
|
||||||
|
"opacity 0.90 0.90,class:^(floorp)$"
|
||||||
|
"opacity 0.90 0.90,class:^(zen-alpha)$"
|
||||||
|
"opacity 0.90 0.90,class:^(zen-beta)$"
|
||||||
|
"opacity 0.90 0.90,class:^(zen)$"
|
||||||
|
"opacity 0.90 0.90,class:^(Brave-browser)$"
|
||||||
|
"opacity 0.80 0.80,class:^(Steam)$"
|
||||||
|
"opacity 0.80 0.80,class:^(steam)$"
|
||||||
|
"opacity 0.80 0.80,class:^(steamwebhelper)$"
|
||||||
|
"opacity 0.80 0.80,class:^(Spotify)$"
|
||||||
|
"opacity 0.80 0.80,initialTitle:^(Spotify Premium)$"
|
||||||
|
"opacity 0.80 0.80,initialTitle:^(Spotify Free)$"
|
||||||
|
"opacity 0.80 0.80,class:^(code-oss)$"
|
||||||
|
"opacity 0.80 0.80,class:^(Code)$"
|
||||||
|
"opacity 0.80 0.80,class:^(code-url-handler)$"
|
||||||
|
"opacity 0.80 0.80,class:^(code-insiders-url-handler)$"
|
||||||
|
"opacity 0.80 0.80,class:^(kitty)$"
|
||||||
|
"opacity 0.80 0.80,class:^(neovide)$"
|
||||||
|
"opacity 0.80 0.80,class:^(org.kde.dolphin)$"
|
||||||
|
"opacity 0.80 0.80,class:^(thunar)$"
|
||||||
|
"opacity 0.80 0.80,class:^(org.kde.ark)$"
|
||||||
|
"opacity 0.80 0.80,class:^(nwg-look)$"
|
||||||
|
"opacity 0.80 0.80,class:^(qt5ct)$"
|
||||||
|
"opacity 0.80 0.80,class:^(qt6ct)$"
|
||||||
|
"opacity 0.80 0.80,class:^(kvantummanager)$"
|
||||||
|
"opacity 0.80 0.80,class:^(waypaper)$"
|
||||||
|
"opacity 0.80 0.80,class:^(org.pulseaudio.pavucontrol)$"
|
||||||
|
"opacity 0.80 0.80,class:^(com.github.wwmm.easyeffects)$"
|
||||||
|
"opacity 0.80 0.80,class:^(thunderbird)$"
|
||||||
|
|
||||||
|
"opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$ # Cartridges-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(com.obsproject.Studio)$ # Obs-Qt"
|
||||||
|
"opacity 0.80 0.80,class:^(gnome-boxes)$ # Boxes-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(discord)$ # Discord-Electron"
|
||||||
|
"opacity 0.80 0.80,class:^(vesktop)$ # Vesktop-Electron"
|
||||||
|
"opacity 0.80 0.80,class:^(ArmCord)$ # ArmCord-Electron"
|
||||||
|
"opacity 0.80 0.80,class:^(app.drey.Warp)$ # Warp-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
|
||||||
|
"opacity 0.80 0.80,class:^(yad)$ # Protontricks-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(signal)$ # Signal-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(io.github.alainm23.planify)$ # planify-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk"
|
||||||
|
"opacity 0.80 0.80,class:^(lutris)$ # Lutris game launcher"
|
||||||
|
|
||||||
|
"opacity 0.80 0.70,class:^(pavucontrol)$"
|
||||||
|
"opacity 0.80 0.70,class:^(blueman-manager)$"
|
||||||
|
"opacity 0.80 0.70,class:^(nm-applet)$"
|
||||||
|
"opacity 0.80 0.70,class:^(nm-connection-editor)$"
|
||||||
|
"opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$"
|
||||||
|
|
||||||
|
"float,class:^(org.kde.dolphin)$,title:^(Progress Dialog — Dolphin)$"
|
||||||
|
"float,class:^(org.kde.dolphin)$,title:^(Copying — Dolphin)$"
|
||||||
|
"float,title:^(Picture-in-Picture)$"
|
||||||
|
"float,class:^(librewolf)$,title:^(Library)$"
|
||||||
|
"float,class:^(floorp)$,title:^(Library)$"
|
||||||
|
"float,class:^(zen-alpha)$,title:^(Library)$"
|
||||||
|
"float,class:^(zen-beta)$,title:^(Library)$"
|
||||||
|
"float,class:^(zen)$,title:^(Library)$"
|
||||||
|
''float,class:^(zen)$,title:^(.*Extension: \(Bitwarden Password Manager\).*)$''
|
||||||
|
"float,class:^(vlc)$"
|
||||||
|
"float,class:^(kvantummanager)$"
|
||||||
|
"float,class:^(qt5ct)$"
|
||||||
|
"float,class:^(qt6ct)$"
|
||||||
|
"float,class:^(nwg-look)$"
|
||||||
|
"float,class:^(org.kde.ark)$"
|
||||||
|
"float,class:^(org.pulseaudio.pavucontrol)$"
|
||||||
|
"float,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
|
||||||
|
"float,class:^(app.drey.Warp)$ # Warp-Gtk"
|
||||||
|
"float,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
|
||||||
|
"float,class:^(yad)$ # Protontricks-Gtk"
|
||||||
|
"float,class:^(eog)$ # Imageviewer-Gtk"
|
||||||
|
"float,class:^(io.github.alainm23.planify)$ # planify-Gtk"
|
||||||
|
"float,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
|
||||||
|
"float,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk"
|
||||||
|
"float,class:^(blueman-manager)$"
|
||||||
|
"float,class:^(nm-applet)$"
|
||||||
|
"float,class:^(nm-connection-editor)$"
|
||||||
|
"float,class:^(org.kde.polkit-kde-authentication-agent-1)$"
|
||||||
|
"opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.gtk)$"
|
||||||
|
"opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.hyprland)$"
|
||||||
|
|
||||||
|
''size 70% 70%,class:^(zen)$,title:^(.*Extension: \(Bitwarden Password Manager\).*)$''
|
||||||
|
"size 50% 50%,class:^(org.pulseaudio.pavucontrol)"
|
||||||
|
|
||||||
|
"stayfocused, class:^(pinentry-)" # fix pinentry losing focus
|
||||||
|
];
|
||||||
|
}
|
325
users/kaitotlex/desktop-environment/swaync.nix
Normal file
325
users/kaitotlex/desktop-environment/swaync.nix
Normal file
|
@ -0,0 +1,325 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop.swaync;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.liminalOS.desktop.swaync = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = config.liminalOS.desktop.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the swaync notification center and daemon.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.swaync.enable = true;
|
||||||
|
services.swaync.settings = {
|
||||||
|
positionX = "right";
|
||||||
|
positionY = "top";
|
||||||
|
control-center-margin-top = 10;
|
||||||
|
control-center-margin-bottom = 10;
|
||||||
|
control-center-margin-right = 10;
|
||||||
|
control-center-margin-left = 10;
|
||||||
|
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 = false;
|
||||||
|
control-center-width = 500;
|
||||||
|
control-center-height = 800;
|
||||||
|
notification-window-width = 500;
|
||||||
|
keyboard-shortcuts = true;
|
||||||
|
image-visibility = "when-available";
|
||||||
|
transition-time = 200;
|
||||||
|
hide-on-clear = false;
|
||||||
|
hide-on-action = true;
|
||||||
|
script-fail-notify = true;
|
||||||
|
widgets = [
|
||||||
|
"title"
|
||||||
|
"mpris"
|
||||||
|
"volume"
|
||||||
|
"backlight"
|
||||||
|
"dnd"
|
||||||
|
"notifications"
|
||||||
|
];
|
||||||
|
widget-config = {
|
||||||
|
title = {
|
||||||
|
text = "Mission Control";
|
||||||
|
clear-all-button = "true";
|
||||||
|
button-text = " All Systems Go";
|
||||||
|
};
|
||||||
|
dnd = {
|
||||||
|
text = "Do Not Disturb";
|
||||||
|
};
|
||||||
|
label = {
|
||||||
|
max-lines = 1;
|
||||||
|
text = "Mission Control";
|
||||||
|
};
|
||||||
|
mpris = {
|
||||||
|
image-size = 96;
|
||||||
|
image-radius = 7;
|
||||||
|
};
|
||||||
|
volume = {
|
||||||
|
label = "";
|
||||||
|
};
|
||||||
|
backlight = {
|
||||||
|
label = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.file.".config/swaync/style.css".text = ''
|
||||||
|
* {
|
||||||
|
font-family: ${config.stylix.fonts.monospace.name};
|
||||||
|
}
|
||||||
|
.control-center .notification-row:focus,
|
||||||
|
.control-center .notification-row:hover {
|
||||||
|
background: #${config.lib.stylix.colors.base00}
|
||||||
|
}
|
||||||
|
.notification-row {
|
||||||
|
outline: none;
|
||||||
|
margin: 10px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.notification {
|
||||||
|
background: transparent;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0px;
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
.notification-content {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 2px solid #${config.lib.stylix.colors.base05};
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.notification-default-action {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.close-button {
|
||||||
|
background: #${config.lib.stylix.colors.base08};
|
||||||
|
color: #${config.lib.stylix.colors.base00};
|
||||||
|
text-shadow: none;
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
.close-button:hover {
|
||||||
|
box-shadow: none;
|
||||||
|
background: #${config.lib.stylix.colors.base0D};
|
||||||
|
transition: all .15s ease-in-out;
|
||||||
|
border: none
|
||||||
|
}
|
||||||
|
.notification-action {
|
||||||
|
border: 2px solid #${config.lib.stylix.colors.base0D};
|
||||||
|
border-top: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.notification-default-action:hover,
|
||||||
|
.notification-action:hover {
|
||||||
|
color: #${config.lib.stylix.colors.base0B};
|
||||||
|
background: #${config.lib.stylix.colors.base0B}
|
||||||
|
}
|
||||||
|
.notification-default-action {
|
||||||
|
border-radius: 5px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
.notification-default-action:not(:only-child) {
|
||||||
|
border-bottom-left-radius: 7px;
|
||||||
|
border-bottom-right-radius: 7px
|
||||||
|
}
|
||||||
|
.notification-action:first-child {
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
background: #${config.lib.stylix.colors.base00}
|
||||||
|
}
|
||||||
|
.notification-action:last-child {
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
background: #${config.lib.stylix.colors.base00}
|
||||||
|
}
|
||||||
|
.inline-reply {
|
||||||
|
margin-top: 8px
|
||||||
|
}
|
||||||
|
.inline-reply-entry {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
caret-color: #${config.lib.stylix.colors.base05};
|
||||||
|
border: 1px solid #${config.lib.stylix.colors.base09};
|
||||||
|
border-radius: 5px
|
||||||
|
}
|
||||||
|
.inline-reply-button {
|
||||||
|
margin-left: 4px;
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
border: 1px solid #${config.lib.stylix.colors.base09};
|
||||||
|
border-radius: 5px;
|
||||||
|
color: #${config.lib.stylix.colors.base05}
|
||||||
|
}
|
||||||
|
.inline-reply-button:disabled {
|
||||||
|
background: initial;
|
||||||
|
color: #${config.lib.stylix.colors.base03};
|
||||||
|
border: 1px solid transparent
|
||||||
|
}
|
||||||
|
.inline-reply-button:hover {
|
||||||
|
background: #${config.lib.stylix.colors.base00}
|
||||||
|
}
|
||||||
|
.body-image {
|
||||||
|
margin-top: 6px;
|
||||||
|
background-color: #${config.lib.stylix.colors.base05};
|
||||||
|
border-radius: 5px
|
||||||
|
}
|
||||||
|
.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: #${config.lib.stylix.colors.base05};
|
||||||
|
text-shadow: none;
|
||||||
|
margin-right: 18px
|
||||||
|
}
|
||||||
|
.body {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 400;
|
||||||
|
background: transparent;
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
text-shadow: none
|
||||||
|
}
|
||||||
|
.control-center {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
border: 2px solid #${config.lib.stylix.colors.base0C};
|
||||||
|
border-radius: 5px;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
.control-center-list {
|
||||||
|
background: transparent
|
||||||
|
}
|
||||||
|
.control-center-list-placeholder {
|
||||||
|
opacity: .5
|
||||||
|
}
|
||||||
|
.floating-notifications {
|
||||||
|
background: transparent
|
||||||
|
}
|
||||||
|
.blank-window {
|
||||||
|
background: alpha(black, 0)
|
||||||
|
}
|
||||||
|
.widget-title {
|
||||||
|
color: #${config.lib.stylix.colors.base0B};
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.widget-title>button {
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
text-shadow: none;
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.widget-title>button:hover {
|
||||||
|
background: #${config.lib.stylix.colors.base08};
|
||||||
|
color: #${config.lib.stylix.colors.base00};
|
||||||
|
}
|
||||||
|
.widget-dnd {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: large;
|
||||||
|
color: #${config.lib.stylix.colors.base0B};
|
||||||
|
}
|
||||||
|
.widget-dnd>switch {
|
||||||
|
border-radius: 5px;
|
||||||
|
/* border: 1px solid #${config.lib.stylix.colors.base0B}; */
|
||||||
|
background: #${config.lib.stylix.colors.base0B};
|
||||||
|
}
|
||||||
|
.widget-dnd>switch:checked {
|
||||||
|
background: #${config.lib.stylix.colors.base08};
|
||||||
|
border: 1px solid #${config.lib.stylix.colors.base08};
|
||||||
|
}
|
||||||
|
.widget-dnd>switch slider {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
border-radius: 5px
|
||||||
|
}
|
||||||
|
.widget-dnd>switch:checked slider {
|
||||||
|
background: #${config.lib.stylix.colors.base00};
|
||||||
|
border-radius: 5px
|
||||||
|
}
|
||||||
|
.widget-label {
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
}
|
||||||
|
.widget-label>label {
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
}
|
||||||
|
.widget-mpris {
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.widget-mpris > box > button {
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.widget-mpris-player {
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin: 10px
|
||||||
|
}
|
||||||
|
.widget-mpris-title {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 1.25rem
|
||||||
|
}
|
||||||
|
.widget-mpris-subtitle {
|
||||||
|
font-size: 1.1rem
|
||||||
|
}
|
||||||
|
.widget-menubar>box>.menu-button-bar>button {
|
||||||
|
border: none;
|
||||||
|
background: transparent
|
||||||
|
}
|
||||||
|
.topbar-buttons>button {
|
||||||
|
border: none;
|
||||||
|
background: transparent
|
||||||
|
}
|
||||||
|
.widget-volume {
|
||||||
|
background: #${config.lib.stylix.colors.base01};
|
||||||
|
padding: 5px;
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: x-large;
|
||||||
|
color: #${config.lib.stylix.colors.base05};
|
||||||
|
}
|
||||||
|
.widget-volume>box>button {
|
||||||
|
background: #${config.lib.stylix.colors.base0B};
|
||||||
|
border: none
|
||||||
|
}
|
||||||
|
.per-app-volume {
|
||||||
|
background-color: #${config.lib.stylix.colors.base00};
|
||||||
|
padding: 4px 8px 8px;
|
||||||
|
margin: 0 8px 8px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.widget-backlight {
|
||||||
|
background: #${config.lib.stylix.colors.base01};
|
||||||
|
padding: 5px;
|
||||||
|
margin: 10px 10px 5px 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: x-large;
|
||||||
|
color: #${config.lib.stylix.colors.base05}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
424
users/kaitotlex/desktop-environment/waybar/default.nix
Normal file
424
users/kaitotlex/desktop-environment/waybar/default.nix
Normal file
|
@ -0,0 +1,424 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.liminalOS.desktop.waybar;
|
||||||
|
theme = config.lib.stylix;
|
||||||
|
palette = theme.colors;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.liminalOS.desktop.waybar = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = config.liminalOS.desktop.enable;
|
||||||
|
description = ''
|
||||||
|
Whether to enable Waybar and the liminalOS rice.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [ playerctl ];
|
||||||
|
programs.waybar =
|
||||||
|
let
|
||||||
|
isDesktop = osConfig.liminalOS.formFactor == "desktop";
|
||||||
|
isLaptop = osConfig.liminalOS.formFactor == "laptop";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
systemd.target = lib.mkIf config.liminalOS.desktop.hyprland.enable "hyprland-session.target";
|
||||||
|
settings.mainBar = {
|
||||||
|
name = "bar0";
|
||||||
|
reload_style_on_change = true;
|
||||||
|
position = "top";
|
||||||
|
layer = "top";
|
||||||
|
height = 37;
|
||||||
|
margin-top = 0;
|
||||||
|
margin-bottom = 0;
|
||||||
|
margin-left = 0;
|
||||||
|
margin-right = 0;
|
||||||
|
modules-left =
|
||||||
|
[
|
||||||
|
"custom/launcher"
|
||||||
|
]
|
||||||
|
++ (lib.optionals isDesktop [
|
||||||
|
|
||||||
|
"custom/playerctl#backward"
|
||||||
|
"custom/playerctl#play"
|
||||||
|
"custom/playerctl#foward"
|
||||||
|
])
|
||||||
|
++ [
|
||||||
|
"custom/playerlabel"
|
||||||
|
]
|
||||||
|
++ (lib.optionals isLaptop [
|
||||||
|
"hyprland/workspaces"
|
||||||
|
]);
|
||||||
|
modules-center = lib.mkIf isDesktop [
|
||||||
|
"cava#left"
|
||||||
|
"hyprland/workspaces"
|
||||||
|
"cava#right"
|
||||||
|
];
|
||||||
|
modules-right = [
|
||||||
|
"tray"
|
||||||
|
"battery"
|
||||||
|
"pulseaudio"
|
||||||
|
"network"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
clock = {
|
||||||
|
format = " {:%a, %d %b, %I:%M %p}";
|
||||||
|
tooltip = "true";
|
||||||
|
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
||||||
|
format-alt = " {:%d/%m}";
|
||||||
|
};
|
||||||
|
"hyprland/workspaces" = {
|
||||||
|
disable-scroll = false;
|
||||||
|
on-scroll-down = "${pkgs.hyprnome}/bin/hyprnome";
|
||||||
|
on-scroll-up = "${pkgs.hyprnome}/bin/hyprnome --previous";
|
||||||
|
format = "{icon}";
|
||||||
|
on-click = "activate";
|
||||||
|
format-icons = {
|
||||||
|
active = "";
|
||||||
|
default = "";
|
||||||
|
urgent = "";
|
||||||
|
special = "";
|
||||||
|
};
|
||||||
|
sort-by-number = true;
|
||||||
|
};
|
||||||
|
"cava#left" = {
|
||||||
|
framerate = 60;
|
||||||
|
autosens = 1;
|
||||||
|
bars = 18;
|
||||||
|
lower_cutoff_freq = 50;
|
||||||
|
higher_cutoff_freq = 10000;
|
||||||
|
method = "pipewire";
|
||||||
|
source = "auto";
|
||||||
|
stereo = true;
|
||||||
|
reverse = false;
|
||||||
|
bar_delimiter = 0;
|
||||||
|
monstercat = false;
|
||||||
|
waves = false;
|
||||||
|
input_delay = 2;
|
||||||
|
format-icons = [
|
||||||
|
"<span foreground='#${palette.base08}'>▁</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▂</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▃</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▄</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▅</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▆</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▇</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>█</span>"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"cava#right" = {
|
||||||
|
framerate = 60;
|
||||||
|
autosens = 1;
|
||||||
|
bars = 18;
|
||||||
|
lower_cutoff_freq = 50;
|
||||||
|
higher_cutoff_freq = 10000;
|
||||||
|
method = "pipewire";
|
||||||
|
source = "auto";
|
||||||
|
stereo = true;
|
||||||
|
reverse = false;
|
||||||
|
bar_delimiter = 0;
|
||||||
|
monstercat = false;
|
||||||
|
waves = false;
|
||||||
|
input_delay = 2;
|
||||||
|
format-icons = [
|
||||||
|
"<span foreground='#${palette.base08}'>▁</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▂</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▃</span>"
|
||||||
|
"<span foreground='#${palette.base08}'>▄</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▅</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▆</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>▇</span>"
|
||||||
|
"<span foreground='#${palette.base0A}'>█</span>"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"custom/playerctl#backward" = {
|
||||||
|
format = " ";
|
||||||
|
on-click = "playerctl previous";
|
||||||
|
on-scroll-up = "playerctl volume .05+";
|
||||||
|
on-scroll-down = "playerctl volume .05-";
|
||||||
|
};
|
||||||
|
"custom/playerctl#play" = {
|
||||||
|
format = "{icon}";
|
||||||
|
return-type = "json";
|
||||||
|
exec = "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F";
|
||||||
|
on-click = "playerctl play-pause";
|
||||||
|
on-scroll-up = "playerctl volume .05+";
|
||||||
|
on-scroll-down = "playerctl volume .05-";
|
||||||
|
format-icons = {
|
||||||
|
Playing = "<span> </span>";
|
||||||
|
Paused = "<span> </span>";
|
||||||
|
Stopped = "<span> </span>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"custom/playerctl#foward" = {
|
||||||
|
format = " ";
|
||||||
|
on-click = "playerctl next";
|
||||||
|
on-scroll-up = "playerctl volume .05+";
|
||||||
|
on-scroll-down = "playerctl volume .05-";
|
||||||
|
};
|
||||||
|
"custom/playerlabel" = {
|
||||||
|
format = "<span> {} </span>";
|
||||||
|
return-type = "json";
|
||||||
|
max-length = 40;
|
||||||
|
exec = "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F";
|
||||||
|
on-click = "";
|
||||||
|
};
|
||||||
|
battery = {
|
||||||
|
states = {
|
||||||
|
good = 95;
|
||||||
|
warning = 30;
|
||||||
|
critical = 15;
|
||||||
|
};
|
||||||
|
format = "{icon} {capacity}%";
|
||||||
|
format-charging = " {capacity}%";
|
||||||
|
format-plugged = " {capacity}% ";
|
||||||
|
format-alt = "{icon} {time}";
|
||||||
|
format-icons = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
memory = {
|
||||||
|
format = " {}%";
|
||||||
|
format-alt = " {used}/{total} GiB";
|
||||||
|
interval = 5;
|
||||||
|
};
|
||||||
|
cpu = {
|
||||||
|
format = " {usage}%";
|
||||||
|
format-alt = " {avg_frequency} GHz";
|
||||||
|
interval = 5;
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
format-wifi = " {signalStrength}%";
|
||||||
|
format-ethernet = " 100% ";
|
||||||
|
tooltip-format = "Connected to {essid} {ifname} via {gwaddr}";
|
||||||
|
format-linked = "{ifname} (No IP)";
|
||||||
|
format-disconnected = " 0% ";
|
||||||
|
};
|
||||||
|
tray = {
|
||||||
|
icon-size = 20;
|
||||||
|
spacing = 8;
|
||||||
|
};
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
format-muted = "";
|
||||||
|
format-icons = {
|
||||||
|
default = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
};
|
||||||
|
scroll-step = 5;
|
||||||
|
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
};
|
||||||
|
"custom/launcher" =
|
||||||
|
let
|
||||||
|
toggle-colorscheme = pkgs.writeShellScriptBin "toggle-colorscheme.sh" ''
|
||||||
|
POLARITY_FILE="/etc/polarity"
|
||||||
|
|
||||||
|
if [[ ! -f "$POLARITY_FILE" ]]; then
|
||||||
|
exit 0
|
||||||
|
elif [[ ! -r "$POLARITY_FILE" ]]; then
|
||||||
|
echo "Error: Cannot read $POLARITY_FILE. Check permissions." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
current_scheme=$(cat "$POLARITY_FILE")
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
echo "Error: Failed to read content from $POLARITY_FILE." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
current_scheme=$(echo "$current_scheme" | xargs)
|
||||||
|
|
||||||
|
target_service=""
|
||||||
|
case "$current_scheme" in
|
||||||
|
dawn)
|
||||||
|
target_service="colorscheme-dusk.service"
|
||||||
|
;;
|
||||||
|
dusk)
|
||||||
|
target_service="colorscheme-dawn.service"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Invalid content '$current_scheme' found in $POLARITY_FILE. Expected 'dawn' or 'dusk'." >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "Current scheme: '$current_scheme'. Attempting to start '$target_service'..."
|
||||||
|
systemctl start "$target_service"
|
||||||
|
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
echo "Error: Failed to execute 'systemctl start $target_service'. Check systemctl logs or permissions." >&2
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Command 'systemctl start $target_service' executed successfully."
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
format = "";
|
||||||
|
on-click = "pkill -9 rofi || rofi -show drun";
|
||||||
|
on-click-right = "${toggle-colorscheme}/bin/toggle-colorscheme.sh";
|
||||||
|
tooltip = "false";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
style =
|
||||||
|
''
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
font-family: GeistMono Nerd Font;
|
||||||
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
window#waybar {
|
||||||
|
background: #${palette.base01};
|
||||||
|
}
|
||||||
|
|
||||||
|
#cava.left, #cava.right {
|
||||||
|
background: #${palette.base00};
|
||||||
|
margin: 4px;
|
||||||
|
padding: 6px 16px;
|
||||||
|
color: #${palette.base00};
|
||||||
|
}
|
||||||
|
#cava.left {
|
||||||
|
border-radius: 24px 10px 24px 10px;
|
||||||
|
}
|
||||||
|
#cava.right {
|
||||||
|
border-radius: 10px 24px 10px 24px;
|
||||||
|
}
|
||||||
|
#workspaces {
|
||||||
|
background: #${palette.base00};
|
||||||
|
color: #${palette.base00}
|
||||||
|
}
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0px 5px;
|
||||||
|
margin: 0px 3px;
|
||||||
|
border-radius: 16px;
|
||||||
|
color: transparent;
|
||||||
|
background: #${palette.base01};
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
background-color: #${palette.base0A};
|
||||||
|
color: #${palette.base01};
|
||||||
|
border-radius: 16px;
|
||||||
|
min-width: 50px;
|
||||||
|
background-size: 400% 400%;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background-color: #${palette.base05};
|
||||||
|
color: #${palette.base01};
|
||||||
|
border-radius: 16px;
|
||||||
|
min-width: 50px;
|
||||||
|
background-size: 400% 400%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray, #pulseaudio, #network, #battery,
|
||||||
|
#custom-playerctl.backward, #custom-playerctl.play, #custom-playerctl.foward{
|
||||||
|
background: #${palette.base00};
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 4px 0px;
|
||||||
|
}
|
||||||
|
#tray, #pulseaudio, #network, #battery{
|
||||||
|
color: #${palette.base05};
|
||||||
|
border-radius: 10px 24px 10px 24px;
|
||||||
|
padding: 0 20px;
|
||||||
|
margin-left: 7px;
|
||||||
|
}
|
||||||
|
#clock {
|
||||||
|
color: #${palette.base05};
|
||||||
|
background: #${palette.base00};
|
||||||
|
border-radius: 0px 0px 0px 40px;
|
||||||
|
padding: 8px 10px 8px 25px;
|
||||||
|
margin-left: 7px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#custom-launcher {
|
||||||
|
color: #${palette.base0A};
|
||||||
|
background: #${palette.base00};
|
||||||
|
border-radius: 0px 0px 40px 0px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px 35px 0px 15px;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-playerctl.backward, #custom-playerctl.play, #custom-playerctl.foward {
|
||||||
|
background: #${palette.base00};
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
#custom-playerctl.backward:hover, #custom-playerctl.play:hover, #custom-playerctl.foward:hover{
|
||||||
|
color: #${palette.base05};
|
||||||
|
}
|
||||||
|
#custom-playerctl.backward {
|
||||||
|
color: #${palette.base08};
|
||||||
|
border-radius: 24px 0px 0px 10px;
|
||||||
|
padding-left: 16px;
|
||||||
|
margin-left: 7px;
|
||||||
|
}
|
||||||
|
#custom-playerctl.play {
|
||||||
|
color: #${palette.base0A};
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
#custom-playerctl.foward {
|
||||||
|
color: #${palette.base08};
|
||||||
|
border-radius: 0px 10px 24px 0px;
|
||||||
|
padding-right: 12px;
|
||||||
|
margin-right: 7px
|
||||||
|
}
|
||||||
|
#custom-playerlabel {
|
||||||
|
background: #${palette.base00};
|
||||||
|
color: #${palette.base05};
|
||||||
|
padding: 0 20px;
|
||||||
|
border-radius: 24px 10px 24px 10px;
|
||||||
|
margin: 4px 0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#window{
|
||||||
|
background: #${palette.base00};
|
||||||
|
padding-left: 15px;
|
||||||
|
padding-right: 15px;
|
||||||
|
border-radius: 16px;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
+ (lib.optionalString isLaptop ''
|
||||||
|
#workspaces {
|
||||||
|
margin: 4px;
|
||||||
|
padding: 6px 16px;
|
||||||
|
border-radius: 24px 10px 24px 10px;
|
||||||
|
}
|
||||||
|
'')
|
||||||
|
+ (lib.optionalString isDesktop ''
|
||||||
|
#workspaces {
|
||||||
|
margin: 4px 5px;
|
||||||
|
padding: 6px 5px;
|
||||||
|
border-radius: 16px;
|
||||||
|
}
|
||||||
|
'');
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -220,13 +220,6 @@
|
||||||
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
|
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.rofi = {
|
|
||||||
enable = true;
|
|
||||||
cycle = true;
|
|
||||||
location = "center";
|
|
||||||
package = pkgs.rofi-wayland;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.dunst.enable = true;
|
services.dunst.enable = true;
|
||||||
|
|
||||||
programs.git = {
|
programs.git = {
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
waybar.enable = false;
|
waybar.enable = false;
|
||||||
kitty.variant256Colors = true;
|
kitty.variant256Colors = true;
|
||||||
neovim.enable = false;
|
neovim.enable = false;
|
||||||
sway.enable = true;
|
hyprland.enable = false;
|
||||||
swaylock.enable = true;
|
hyprlock.enable = false;
|
||||||
|
rofi.enable = false;
|
||||||
|
swaync.enable = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue