Compare commits

...

2 Commits

Author SHA1 Message Date
88be74cf74 Squash merge modularization into main 2025-12-28 00:14:33 +00:00
8a3678428b Squash merge bar-rework into main 2025-12-28 00:14:00 +00:00
51 changed files with 772 additions and 285 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ nix/nixos.qcow2
nix_file.tar.gz nix_file.tar.gz
nvim nvim
tmux/plugins tmux/plugins
modules/quickshell/quickshell/.qmlls.ini

View File

@@ -1,14 +1,25 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" ]; boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"vmd"
"nvme"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];

View File

@@ -6,39 +6,27 @@
... ...
}: }:
{ {
# imports = [
# ../../modules/hyprland/home.nix
# ../../modules/quickshell/home.nix
# ../../modules/chromium/home.nix
# #./modules/neovim/home.nix
# ../../modules/stylix/home.nix
# ../../modules/nixvim/home.nix
# ../../modules/tmux/home.nix
# ../../modules/theme/home.nix
# # ./modules/spicetify/home.nix
# ../../modules/obs/home.nix
# ../../modules/blender/home.nix
# ../../modules/fish/home.nix
# ../../modules/ytm/home.nix
# ../../overlays.nix
# ];
modules = { modules = {
Hyprland.enable = true; Hyprland.enable = true;
quickshell.enable = true; quickshell.enable = true;
# chromium.enable = true; # chromium.enable = true;
wivrn.enable = true; wivrn.enable = false;
helium.enable = true; helium.enable = true;
nixvim.enable = true; nixvim.enable = true;
kitty.enable = true;
helix.enable = false; helix.enable = false;
stylix.enable = true; stylix.enable = true;
tmux.enable = true; tmux.enable = true;
theme.enable = true; theme.enable = true;
obs.enable = true; obs = {
blender.enable = true; enable = true;
bottles.enable = true; autostart = false;
};
blender.enable = false;
bottles.enable = false;
fish.enable = true; fish.enable = true;
youtube-music.enable = true; youtube-music.enable = true;
unityhub.enable = true; unityhub.enable = false;
direnv.enable = true; direnv.enable = true;
git.enable = true; git.enable = true;
rsRPC.enable = true; rsRPC.enable = true;
@@ -61,6 +49,16 @@
}; };
}; };
xdg.mimeApps.enable = true; xdg.mimeApps.enable = true;
wayland.windowManager.hyprland.settings = {
monitor = [
"eDP-1, 2880x1800@120, 0x0, 2"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = 0;
};
};
# This value determines the Home Manager release that your configuration is # This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release # compatible with. This helps avoid breakage when a new Home Manager release
@@ -78,9 +76,6 @@
vim vim
telegram-desktop telegram-desktop
vesktop vesktop
# (pkgs.discord.override { withVencord = true; })
# webcord-vencord
# spotify
pavucontrol pavucontrol
lazygit lazygit
btop btop

View File

@@ -0,0 +1,38 @@
{ pkgs, lib, ... }:
let
in
{
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
PCIE_ASPM_ON_BAT = "powersave";
CPU_SCALING_GOVERNOR_ON_AC = "balanced";
PCIE_ASPM_ON_AC = "balanced";
START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging
};
};
# services.tuned.enable = true;
services.thermald.enable = true;
services.upower = {
enable = true;
};
# boot.kernelParams = [ "mem_sleep_default=deep" ];
services.logind.settings.Login = {
HandleLidSwitch = "suspend-then-hibernate";
HandleLidSwitchExternalPower = "ignore";
HandleLidSwitchDocked = "ignore";
};
systemd.sleep.extraConfig = ''
HibernateDelaySec=30min
SuspendEstimationSec=120
'';
# one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate", "lock"
powerManagement = {
enable = true;
powertop.enable = true;
};
}

View File

@@ -16,6 +16,7 @@ in
{ {
imports = [ imports = [
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
./laptop.nix
]; ];
modules = { modules = {
fish.enable = true; fish.enable = true;
@@ -24,11 +25,12 @@ in
steam.enable = false; steam.enable = false;
Hyprland.enable = true; Hyprland.enable = true;
wivrn.enable = false; wivrn.enable = false;
fonts.enable = true;
}; };
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_6_12; # Hibernate works on 6.12 but not on latest
networking.hostName = "doloro-nixos-laptop"; # Define your hostname. networking.hostName = "doloro-nixos-laptop"; # Define your hostname.
security.rtkit.enable = true; security.rtkit.enable = true;
@@ -37,7 +39,8 @@ in
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
# Set your time zone. # Set your time zone.
time.timeZone = "Europe/London"; # time.timeZone = "Europe/London";
services.automatic-timezoned.enable = true;
nix.settings = { nix.settings = {
substituters = [ substituters = [
@@ -59,6 +62,11 @@ in
}; };
hardware.graphics = { hardware.graphics = {
enable = true; enable = true;
extraPackages = with pkgs; [
intel-media-driver # VA-API (iHD) userspace
# vpl-gpu-rt # oneVPL (QSV) runtime
intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe
];
}; };
services.openssh = { services.openssh = {
enable = true; enable = true;
@@ -70,9 +78,6 @@ in
users.users.root.openssh.authorizedKeys.keys = [ users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7"
]; ];
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties. # Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8"; # i18n.defaultLocale = "en_US.UTF-8";
@@ -85,17 +90,6 @@ in
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver.enable = true; services.xserver.enable = true;
# Configure keymap in X11
# services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# services.pulseaudio.enable = true;
# OR
sops = { sops = {
defaultSopsFile = builtins.toPath "${nix-meow.flakeRoot}/secrets/users.yaml"; defaultSopsFile = builtins.toPath "${nix-meow.flakeRoot}/secrets/users.yaml";
secrets = { secrets = {
@@ -107,6 +101,7 @@ in
}; };
}; };
}; };
services.pipewire = { services.pipewire = {
enable = true; enable = true;
pulse.enable = true; pulse.enable = true;
@@ -122,9 +117,13 @@ in
packages = with pkgs; [ packages = with pkgs; [
tree tree
]; ];
# initialPassword = "sex";
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path; hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc public key
];
# initialPassword = "sex";
}; };
users.mutableUsers = false;
# programs.firefox.enable = true; # programs.firefox.enable = true;

View File

@@ -23,7 +23,10 @@
# ../../overlays.nix # ../../overlays.nix
# ]; # ];
modules = { modules = {
Hyprland.enable = true; Hyprland = {
enable = true;
suspend-on-hibernate = true;
};
quickshell.enable = true; quickshell.enable = true;
# chromium.enable = true; # chromium.enable = true;
wivrn.enable = true; wivrn.enable = true;
@@ -31,9 +34,13 @@
nixvim.enable = true; nixvim.enable = true;
helix.enable = false; helix.enable = false;
stylix.enable = true; stylix.enable = true;
kitty.enable = true;
tmux.enable = true; tmux.enable = true;
theme.enable = true; theme.enable = true;
obs.enable = true; obs = {
enable = true;
autostart = true;
};
blender.enable = true; blender.enable = true;
bottles.enable = true; bottles.enable = true;
fish.enable = true; fish.enable = true;
@@ -48,6 +55,24 @@
home.username = "doloro"; home.username = "doloro";
home.homeDirectory = "/home/doloro"; home.homeDirectory = "/home/doloro";
wayland.windowManager.hyprland.settings = {
monitor = [
"HDMI-A-1, 1920x1080@60, 0x0, 1"
"DP-3, 1920x1080@144, 1920x0, 1"
];
exec-once = [
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
];
workspace = [
"name:2, monitor:DP-3"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = -0.5;
};
};
services = { services = {
gpg-agent = { gpg-agent = {
enable = true; enable = true;
@@ -89,39 +114,6 @@
gcr gcr
qbittorrent qbittorrent
]; ];
# sops.age.keyFile = "/home/doloro/.config/sops/age/key.txt";
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/doloro/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = { home.sessionVariables = {
EDITOR = "nvim"; EDITOR = "nvim";
}; };
@@ -130,8 +122,8 @@
enable = true; enable = true;
}; };
}; };
xdg.configFile."mimeapps.list".force = true; xdg.configFile."mimeapps.list".force = true;
# Let Home Manager install and manage itself.
programs = { programs = {
ssh = { ssh = {

View File

@@ -24,6 +24,7 @@ in
steam.enable = true; steam.enable = true;
Hyprland.enable = true; Hyprland.enable = true;
wivrn.enable = true; wivrn.enable = true;
fonts.enable = true;
}; };
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
@@ -174,29 +175,29 @@ in
package = config.boot.kernelPackages.nvidiaPackages.latest; package = config.boot.kernelPackages.nvidiaPackages.latest;
}; };
fonts = { # fonts = {
enableDefaultPackages = true; # enableDefaultPackages = true;
packages = # packages =
with pkgs; # with pkgs;
[ # [
nerd-fonts.jetbrains-mono # nerd-fonts.jetbrains-mono
material-design-icons # material-design-icons
material-symbols # material-symbols
googlesans-code # googlesans-code
nerd-fonts.caskaydia-cove # nerd-fonts.caskaydia-cove
nerd-fonts.noto # nerd-fonts.noto
noto-fonts-cjk-sans # noto-fonts-cjk-sans
noto-fonts-cjk-serif # noto-fonts-cjk-serif
] # ]
++ [ # ++ [
(inputs.font-patcher.lib.patchFont { # (inputs.font-patcher.lib.patchFont {
font = "${pkgs.googlesans-code}/share/fonts/googlesans-code/GoogleSansCode[wght].ttf"; # font = "${pkgs.googlesans-code}/share/fonts/googlesans-code/GoogleSansCode[wght].ttf";
name = "Google Sans Code Nerd Font"; # name = "Google Sans Code Nerd Font";
inherit system; # inherit system;
}) # })
]; # ];
fontDir.enable = true; # fontDir.enable = true;
}; # };
boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
programs.nix-ld.enable = true; programs.nix-ld.enable = true;
programs.nix-ld.libraries = with pkgs; [ programs.nix-ld.libraries = with pkgs; [

View File

@@ -0,0 +1,4 @@
_: {
# home = ./home.nix;
nixos = ./nixos.nix;
}

38
modules/fonts/nixos.nix Normal file
View File

@@ -0,0 +1,38 @@
{
inputs,
pkgs,
lib,
config,
...
}:
let
cfg = config.modules.fonts;
in
{
options.modules.fonts = {
enable = lib.mkEnableOption "fonts";
};
config.fonts = lib.mkIf cfg.enable {
enableDefaultPackages = true;
packages =
with pkgs;
[
nerd-fonts.jetbrains-mono
material-design-icons
material-symbols
googlesans-code
nerd-fonts.caskaydia-cove
nerd-fonts.noto
noto-fonts-cjk-sans
noto-fonts-cjk-serif
]
++ [
(inputs.font-patcher.lib.patchFont {
font = "${pkgs.googlesans-code}/share/fonts/googlesans-code/GoogleSansCode[wght].ttf";
name = "Google Sans Code Nerd Font";
inherit system;
})
];
fontDir.enable = true;
};
}

View File

@@ -28,6 +28,7 @@ in
]; ];
options.modules.Hyprland = { options.modules.Hyprland = {
enable = lib.mkEnableOption "Hyprland"; enable = lib.mkEnableOption "Hyprland";
suspend-on-hibernate = lib.mkEnableOption "soh";
}; };
# TODO, split this into its own module; # TODO, split this into its own module;
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@@ -44,22 +45,8 @@ in
wlogout = { wlogout = {
enable = true; enable = true;
}; };
foot = {
enable = true;
settings = {
main = {
term = "xterm-256color";
font = "Google Sans Code Nerd Font:size=11";
}; };
systemd.user.services."hyprland_suspend" = lib.mkIf cfg.suspend-on-hibernate {
mouse = {
hide-when-typing = "yes";
};
};
};
};
systemd.user.services."hyprland_suspend" = {
Unit = { Unit = {
Description = "Suspend hyprland"; Description = "Suspend hyprland";
Before = [ Before = [

View File

@@ -1,15 +1,20 @@
{ inputs, pkgs, ... }: { inputs, pkgs, ... }:
{ {
home.packages = [ home.packages = [
pkgs.walker pkgs.hyprlauncher
]; ];
systemd.user.services.walker-deamon = { wayland.windowManager.hyprland.settings = {
bind = [
"$mainMod, R, exec, hyprlauncher"
];
};
systemd.user.services.hyprlauncher-deamon = {
Install = { Install = {
WantedBy = [ "hyprland-session.target" ]; WantedBy = [ "hyprland-session.target" ];
}; };
Service = { Service = {
ExecStart = "${pkgs.writeShellScript "watch-store" '' ExecStart = "${pkgs.writeShellScript "watch-store" ''
walker --gapplication-service hyprlauncher -d
''}"; ''}";
}; };
}; };

View File

@@ -8,5 +8,6 @@ in
wayfreeze wayfreeze
grim grim
slurp slurp
killall
]; ];
} }

View File

@@ -11,13 +11,6 @@
hyprcursor.enable = true; hyprcursor.enable = true;
}; };
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = {
monitor = [
"HDMI-A-1, 1920x1080@60, 0x0, 1"
"DP-3, 1920x1080@144, 1920x0, 1"
];
exec-once = [
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
];
env = [ env = [
"XCURSOR_THEME,BreezeX-RosePine-Linux" "XCURSOR_THEME,BreezeX-RosePine-Linux"
"XCURSOR_SIZE,24" "XCURSOR_SIZE,24"
@@ -47,7 +40,10 @@
}; };
blur = { blur = {
enabled = false; enabled = true;
passes = 1;
new_optimizations = true;
ignore_opacity = false;
}; };
}; };
animations = { animations = {
@@ -92,11 +88,6 @@
enable_anr_dialog = false; enable_anr_dialog = false;
vfr = true; vfr = true;
}; };
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = -0.5;
};
"$mainMod" = "SUPER"; "$mainMod" = "SUPER";
bind = [ bind = [
"$mainMod, Q, exec, foot" "$mainMod, Q, exec, foot"
@@ -104,7 +95,6 @@
"$mainMod, M, exit" "$mainMod, M, exit"
"$mainMod, E, exec, $fileManager" "$mainMod, E, exec, $fileManager"
"$mainMod, V, togglefloating," "$mainMod, V, togglefloating,"
"$mainMod, R, exec, walker"
"$mainMod, P, pseudo, # dwindle" "$mainMod, P, pseudo, # dwindle"
"$mainMod, J, togglesplit, # dwindle" "$mainMod, J, togglesplit, # dwindle"
"$mainMod, left, movefocus, l" "$mainMod, left, movefocus, l"
@@ -141,9 +131,6 @@
"$mainMod, mouse:272, movewindow" "$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow" "$mainMod, mouse:273, resizewindow"
]; ];
workspace = [
"name:2, monitor:DP-3"
];
windowrule = [ windowrule = [
"match:class .*, suppress_event maximize" "match:class .*, suppress_event maximize"
"match:class ^(gamescope)$, workspace 5" "match:class ^(gamescope)$, workspace 5"

View File

@@ -0,0 +1,4 @@
_: {
nixos = ./nixos.nix;
home = ./home.nix;
}

46
modules/kitty/home.nix Normal file
View File

@@ -0,0 +1,46 @@
{
config,
lib,
inputs,
pkgs,
home,
system,
...
}:
let
cfg = config.modules.kitty;
in
{
options.modules.kitty = {
enable = lib.mkEnableOption "kitty configuration module";
};
config = lib.mkIf cfg.enable {
programs.kitty = {
enable = true;
font = {
name = "Google Sans Code Nerd Font";
size = 11;
};
settings = {
sync_to_monitor = "yes";
background_opacity = 0.6;
cursor_trail = 1;
### Blur is handled in hyprland config ###
# enable_background_blur = "true";
# background_blur = 1;
};
};
## i could use picom but i just used hyprland blur lol
# services.picom = {
# # for cool gpu accelerated kitty effiect like blurred bg
# enable = true;
# backend = "glx";
# activeOpacity = 0.5;
# };
wayland.windowManager.hyprland.settings = {
bind = [
"$mainMod, q, exec, kitty"
];
};
};
}

19
modules/kitty/nixos.nix Normal file
View File

@@ -0,0 +1,19 @@
{
config,
lib,
inputs,
pkgs,
home,
system,
...
}:
let
cfg = config.modules.kitty;
in
{
options.modules.kitty = {
enable = lib.mkEnableOption "kitty configuration module";
};
config = lib.mkIf cfg.enable {
};
}

View File

@@ -37,12 +37,17 @@ in
configs = true; configs = true;
}; };
plugins = { plugins = {
todo-comments.enable = true;
lsp-status.enable = true; lsp-status.enable = true;
transparent.enable = true;
lsp = { lsp = {
enable = true; enable = true;
servers = { servers = {
qmlls = { qmlls = {
enable = true; enable = true;
config = {
cmd = "-E";
};
}; };
rust_analyzer = { rust_analyzer = {
enable = true; enable = true;
@@ -57,6 +62,10 @@ in
}; };
}; };
}; };
lsp-format = {
enable = true;
# lspServersToEnable = [ "qmlls" ];
};
notify.enable = true; notify.enable = true;
mini-cursorword.enable = true; mini-cursorword.enable = true;
# mini-statusline.enable = true; # mini-statusline.enable = true;

View File

@@ -11,6 +11,7 @@ in
{ {
options.modules.obs = { options.modules.obs = {
enable = lib.mkEnableOption "obs"; enable = lib.mkEnableOption "obs";
autostart = lib.mkEnableOption "autostart with reply";
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs = { programs = {
@@ -49,7 +50,7 @@ in
''}"; ''}";
}; };
}; };
systemd.user.services.obs-autostart = lib.mkIf cfg.enable { systemd.user.services.obs-autostart = lib.mkIf cfg.autostart {
Unit = { Unit = {
Description = "OBS daemon"; Description = "OBS daemon";
After = [ "hyprland-session.target" ]; After = [ "hyprland-session.target" ];

View File

@@ -17,7 +17,7 @@ in
}; };
config.xdg.configFile."quickshell" = lib.mkIf cfg.enable { config.xdg.configFile."quickshell" = lib.mkIf cfg.enable {
recursive = true; recursive = true;
source = config.lib.file.mkOutOfStoreSymlink "${nix-meow.flakeRoot}/modules/quickshell/quickshell"; source = config.lib.file.mkOutOfStoreSymlink /home/doloro/dotfiles/modules/quickshell/quickshell;
}; };
config.systemd.user.services.quickshell = lib.mkIf cfg.enable { config.systemd.user.services.quickshell = lib.mkIf cfg.enable {
Unit = { Unit = {

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M480-420q-41.92 0-70.96-29.04Q380-478.08 380-520v-240q0-41.92 29.04-70.96Q438.08-860 480-860q41.92 0 70.96 29.04Q580-801.92 580-760v240q0 41.92-29.04 70.96Q521.92-420 480-420Zm-30 290v-131.85q-99-11.31-164.5-84.92Q220-420.39 220-520h60q0 83 58.5 141.5T480-320q83 0 141.5-58.5T680-520h60q0 99.61-65.5 173.23Q609-273.16 510-261.85V-130h-60Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M479.93-379q-56.47 0-95.94-40.01-39.47-40.02-39.47-96.47v-232.04q0-56.45 39.53-95.97Q423.59-883 480.07-883q56.47 0 95.94 39.51 39.47 39.52 39.47 95.97v232.04q0 56.45-39.53 96.47Q536.41-379 479.93-379ZM434.02-93.52v-124.76q-111.11-14.13-183.26-99.16-72.15-85.03-72.15-198.04h92.52q0 87.09 61.13 147.98 61.13 60.89 147.85 60.89 86.73 0 147.75-61.09 61.01-61.1 61.01-147.78h92.52q0 113.24-72.15 198.16-72.15 84.91-183.26 99.04v124.76h-91.96Z"/></svg>

Before

Width:  |  Height:  |  Size: 463 B

After

Width:  |  Height:  |  Size: 563 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#EA3323"><path d="m710-362-58-58q14-23 21-48t7-52h80q0 44-13 83.5T710-362ZM592-482 360-714v-46q0-50 35-85t85-35q50 0 85 35t35 85v240q0 11-2.5 20t-5.5 18ZM440-120v-124q-104-14-172-92.5T200-520h80q0 83 58.5 141.5T480-320q34 0 64.5-10.5T600-360l57 57q-29 23-63.5 38.5T520-244v124h-80Zm352 64L56-792l56-56 736 736-56 56Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="m735.55-357.02-68.57-68.7q11.17-19.04 16.48-41.43 5.3-22.39 5.3-48.33h91.96q0 42.93-11.12 83.44-11.12 40.52-34.05 75.02ZM610.07-482.37 348.93-744v-31.22q7.35-44.11 43.99-75.94Q429.57-883 479.33-883q56.54 0 96.29 39.47 39.75 39.46 39.75 96.01v232.04q0 8.87-1.43 17.87-1.44 9-3.87 15.24ZM433.35-93.52v-124.7q-111.11-14.13-183.26-99.02-72.16-84.9-72.16-198.24h92.53q0 87.09 61.01 147.98 61.01 60.89 147.86 60.89 39.08 0 74.11-13.59 35.02-13.59 62.28-37.58l67 67q-31.89 29.15-71.76 47.9-39.87 18.74-85.66 24.83v124.53h-91.95Zm351.82 20.5-723.5-723.5 57.66-57.65 723 723-57.16 58.15Z"/></svg>

Before

Width:  |  Height:  |  Size: 424 B

After

Width:  |  Height:  |  Size: 703 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#EA3323"><path d="M792-56 671-177q-25 16-53 27.5T560-131v-82q14-5 27.5-10t25.5-12L480-368v208L280-360H120v-240h128L56-792l56-56 736 736-56 56Zm-8-232-58-58q17-31 25.5-65t8.5-70q0-94-55-168T560-749v-82q124 28 202 125.5T840-481q0 53-14.5 102T784-288ZM650-422l-90-90v-130q47 22 73.5 66t26.5 96q0 15-2.5 29.5T650-422ZM480-592 376-696l104-104v208Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M790.15-48.91 666.02-174.17q-20.24 12.24-43.19 21.57-22.96 9.34-48.2 14.71v-86.61q7.98-2.8 15.49-5.61 7.51-2.8 15.12-6.54L499.63-343.39v215.17L281.06-346.78h-166.3v-266.44h120.13l-187.61-191 58.65-58.65 743.44 754.74-59.22 59.22Zm-.3-238.87-60.72-61.85q17-29.44 25.75-62.4 8.75-32.97 8.75-68.47 0-88.43-52.56-158.65-52.57-70.22-136.44-97.35v-86.61q119.89 28.57 196.47 123.89 76.58 95.33 76.58 218.72 0 53.76-15.1 102.14t-42.73 90.58ZM669.41-409.91l-94.78-95.92v-137.95q48.76 22.13 79.9 65.79 31.15 43.66 31.15 97.99 0 19.2-4.07 36.61t-12.2 33.48ZM499.63-582.52 376.41-708.57l123.22-123.21v249.26Z"/></svg>

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M561.54-155.62v-62q86.54-27.53 139.42-100 52.89-72.46 52.89-163.38t-52.89-163.38q-52.88-72.47-139.42-100v-62q111.69 29.92 182 119.92 70.3 90 70.3 205.46 0 115.46-70.3 205.46-70.31 90-182 119.92ZM146.16-380v-200h148.46l171.53-171.53v543.06L294.62-380H146.16Zm415.38 46.15v-294.3q40.46 22 62.54 61.96 22.07 39.96 22.07 86.19 0 45.61-22.27 84.88-22.27 39.27-62.34 61.27Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M565.7-158.89v-79.61q80.43-24.13 130.71-90.85 50.29-66.72 50.29-150.15t-50.79-149.15q-50.78-65.72-130.21-92.85v-79.61q111.89 25.57 184.18 115.64 72.3 90.08 72.3 204.97t-71.8 205.47q-71.79 90.57-184.68 116.14ZM137.82-371.78v-218.44h150.31L498.7-800.78v639.56L288.13-371.78H137.82Zm427.88 44.56v-306.56q46.76 20.69 76.62 61.07 29.86 40.38 29.86 91.71 0 51.83-29.86 92.24t-76.62 61.54Z"/></svg>

Before

Width:  |  Height:  |  Size: 492 B

After

Width:  |  Height:  |  Size: 507 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M479.93-379q-56.47 0-95.94-40.01-39.47-40.02-39.47-96.47v-232.04q0-56.45 39.53-95.97Q423.59-883 480.07-883q56.47 0 95.94 39.51 39.47 39.52 39.47 95.97v232.04q0 56.45-39.53 96.47Q536.41-379 479.93-379ZM434.02-93.52v-124.76q-111.11-14.13-183.26-99.16-72.15-85.03-72.15-198.04h92.52q0 87.09 61.13 147.98 61.13 60.89 147.85 60.89 86.73 0 147.75-61.09 61.01-61.1 61.01-147.78h92.52q0 113.24-72.15 198.16-72.15 84.91-183.26 99.04v124.76h-91.96Z"/></svg>

After

Width:  |  Height:  |  Size: 563 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="m735.55-357.02-68.57-68.7q11.17-19.04 16.48-41.43 5.3-22.39 5.3-48.33h91.96q0 42.93-11.12 83.44-11.12 40.52-34.05 75.02ZM610.07-482.37 348.93-744v-31.22q7.35-44.11 43.99-75.94Q429.57-883 479.33-883q56.54 0 96.29 39.47 39.75 39.46 39.75 96.01v232.04q0 8.87-1.43 17.87-1.44 9-3.87 15.24ZM433.35-93.52v-124.7q-111.11-14.13-183.26-99.02-72.16-84.9-72.16-198.24h92.53q0 87.09 61.01 147.98 61.01 60.89 147.86 60.89 39.08 0 74.11-13.59 35.02-13.59 62.28-37.58l67 67q-31.89 29.15-71.76 47.9-39.87 18.74-85.66 24.83v124.53h-91.95Zm351.82 20.5-723.5-723.5 57.66-57.65 723 723-57.16 58.15Z"/></svg>

After

Width:  |  Height:  |  Size: 703 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M565.7-158.89v-79.61q80.43-24.13 130.71-90.85 50.29-66.72 50.29-150.15t-50.79-149.15q-50.78-65.72-130.21-92.85v-79.61q111.89 25.57 184.18 115.64 72.3 90.08 72.3 204.97t-71.8 205.47q-71.79 90.57-184.68 116.14ZM137.82-371.78v-218.44h150.31L498.7-800.78v639.56L288.13-371.78H137.82Zm427.88 44.56v-306.56q46.76 20.69 76.62 61.07 29.86 40.38 29.86 91.71 0 51.83-29.86 92.24t-76.62 61.54Z"/></svg>

After

Width:  |  Height:  |  Size: 507 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#FFFFFF"><path d="M790.15-48.91 666.02-174.17q-20.24 12.24-43.19 21.57-22.96 9.34-48.2 14.71v-86.61q7.98-2.8 15.49-5.61 7.51-2.8 15.12-6.54L499.63-343.39v215.17L281.06-346.78h-166.3v-266.44h120.13l-187.61-191 58.65-58.65 743.44 754.74-59.22 59.22Zm-.3-238.87-60.72-61.85q17-29.44 25.75-62.4 8.75-32.97 8.75-68.47 0-88.43-52.56-158.65-52.57-70.22-136.44-97.35v-86.61q119.89 28.57 196.47 123.89 76.58 95.33 76.58 218.72 0 53.76-15.1 102.14t-42.73 90.58ZM669.41-409.91l-94.78-95.92v-137.95q48.76 22.13 79.9 65.79 31.15 43.66 31.15 97.99 0 19.2-4.07 36.61t-12.2 33.48ZM499.63-582.52 376.41-708.57l123.22-123.21v249.26Z"/></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h86.22v234.26h-86.22Z"/></svg>

After

Width:  |  Height:  |  Size: 718 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h163.83v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-11.02-26.95-11.02-10.9-27.06-10.9h-530.2q-16.04 0-26.94 11.02-10.91 11.02-10.91 27.07v238.32q0 16.05 11.03 26.95 11.02 10.9 27.06 10.9Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h241.44v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h321.44v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h401.44v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h470.68v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M159.28-231.87q-53.58 0-91.21-37.63-37.64-37.63-37.64-91.22v-238.8q0-53.59 37.64-91.1 37.63-37.51 91.21-37.51h530.68q53.58 0 91.09 37.51 37.52 37.51 37.52 91.1v238.8q0 53.59-37.52 91.22-37.51 37.63-91.09 37.63H159.28Zm.24-91h530.2q16.04 0 26.94-11.02 10.9-11.02 10.9-27.07v-238.32q0-16.05-10.9-26.95-10.9-10.9-26.94-10.9h-530.2q-16.04 0-27.06 10.9-11.03 10.9-11.03 26.95v238.32q0 16.05 11.03 27.07 11.02 11.02 27.06 11.02Zm699.05-53.06v-208.14h25.5q19.15 0 32.32 13.18 13.18 13.17 13.18 32.32v117.14q0 19.15-13.18 32.32-13.17 13.18-32.32 13.18h-25.5Zm-697.14 13.06v-234.26h526.13v234.26H161.43Z"/></svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -12,65 +12,50 @@ import "widgets/common" as Common
import "widgets/clock" as Clock import "widgets/clock" as Clock
import "widgets/workspace" as Workspace import "widgets/workspace" as Workspace
// Tako kindly threatened you to sort the naming schema and to put all the svg's in an asset folder, so please do that
PanelWindow { PanelWindow {
property var modelData property var modelData
screen: modelData.values[0]; screen: modelData.values[0]
color: '#20ffffff' color: Common.Colors.colors.mainBackground
anchors { anchors {
top: true top: true
left: true left: true
right: true right: true
} }
implicitHeight: 32 implicitHeight: 31
RowLayout { RowLayout {
height: 28 height: 30
anchors { anchors {
top: parent.top top: parent.top
left: parent.left left: parent.left
right: parent.right right: parent.right
// bottomMargin: 2 // bottomMargin: 2
leftMargin: 10 leftMargin: 5
rightMargin: 10 rightMargin: 5
}
RowLayout { // Left
Layout.alignment: Qt.AlignLeft
Clock.Date {}
Clock.Clock {}
Workspace.WorkspaceWidget {}
}
RowLayout { // Center
// TODO: add icons of the active window per workspace in the workspace tab
anchors.centerIn: parent
}
RowLayout { // Right
Layout.alignment: Qt.AlignRight
Loader {
sourceComponent: Widgets.Audio {}
} }
RowLayout { RowLayout {
Text { // Left
text: HyprlandWindowTracker.HyprlandWindowTracker.aaaa Layout.alignment: Qt.AlignLeft
Widgets.Workspaces {}
} }
visible: Player.activePlayer.isPlaying() RowLayout {
Player.PlayerWidgetV2 { // Center
Layout.alignment: Qt.AlignCenter
}
RowLayout {
// Right
Layout.alignment: Qt.AlignRight
Widgets.Demo {}
} }
} }
Widgets.SystemTray { // Rectangle {
id: systemTray // anchors {
} // bottom: parent.bottom
} // left: parent.left
} // right: parent.right
Rectangle { // }
anchors { // height: 1
bottom: parent.bottom // color: "#8d8d8d"
left: parent.left // }
right: parent.right
}
height: 1
color: "#8d8d8d"
}
} }

View File

@@ -4,56 +4,55 @@ import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell.Widgets import Quickshell.Widgets
import Quickshell.Services.Pipewire import Quickshell.Services.Pipewire
import QtQuick.VectorImage
import QtQuick.Effects
import QtQuick.Shapes 1.10
import QtQuick.Effects
import "common" as Common import "common" as Common
Rectangle {
Item {
id: root id: root
property PwNode speakerNode: Pipewire.defaultAudioSink property PwNode speakerNode: Pipewire.defaultAudioSink
property PwNode microphoneNode: Pipewire.defaultAudioSource property PwNode microphoneNode: Pipewire.defaultAudioSource
PwObjectTracker { objects: [ root.microphoneNode, root.speakerNode ] } PwObjectTracker {
objects: [root.microphoneNode, root.speakerNode]
width: row.width }
height: row.height implicitWidth: itemContent.width + 8
implicitHeight: 24
// console.log("a"); radius: 5.5
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
color: Common.Colors.colors.secondary // Define item color
// color: "#2a2a2a"
RowLayout { RowLayout {
id: row id: itemContent
Item {
implicitWidth: 28
implicitHeight: 28
Rectangle {
width: parent.width
height: parent.height
radius: 7
color: "black"
}
Text {
anchors.centerIn: parent anchors.centerIn: parent
// implicitSize: 25 // spacing: 100
font.pixelSize: 28 Repeater {
color: root.speakerNode.audio.muted ? "#FF474C" : "white" model: [
font.family: "CaskaydiaCove Nerd Font Mono" {
text: root.speakerNode.audio.muted ? Common.Icons.audioIcons.speakerMuted : Common.Icons.audioIcons.speaker on: Common.Icons.audioIcons["speaker"],
} off: Common.Icons.audioIcons["speakerMuted"],
} node: root.speakerNode
},
{
on: Common.Icons.audioIcons["microphone"],
off: Common.Icons.audioIcons["microphoneMuted"],
node: root.microphoneNode
},
]
Item { Item {
implicitWidth: 28 id: meow
implicitHeight: 28 implicitWidth: 24
Rectangle { Layout.alignment: Qt.AlignHCenter
width: parent.width implicitHeight: 24
height: parent.height
radius: 7
color: "black"
}
Text { Text {
anchors.centerIn: parent id: textElement
// implicitSize: 25 anchors.centerIn: parent // Ensure the text fills the parent item
font.pixelSize: 34 text: modelData.node.audio.muted ? modelData.off : modelData.on
color: root.microphoneNode.audio.muted ? "#FF474C" : "white" font.pointSize: 18.25
font.family: "CaskaydiaCove Nerd Font Mono" font.weight: Font.DemiBold
text: root.microphoneNode.audio.muted ? Common.Icons.audioIcons.microphoneMuted : Common.Icons.audioIcons.microphone color: modelData.node.audio.muted ? Common.Colors.colors.critial2 : Common.Colors.colors.primary
}
} }
} }
} }

View File

@@ -0,0 +1,76 @@
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Services.Pipewire
import QtQuick.VectorImage
import QtQuick.Effects
import Quickshell.Services.UPower
import "common" as Common
Rectangle {
// TODO eventually fix the alignment (it isnt centered horizentally)
id: root
property int battPercent: 58
implicitWidth: itemContent.width + 8
implicitHeight: 24
visible: {if (UPower.displayDevice.ready) { true } else {false}}
radius: 5.5
Layout.alignment: Qt.AlignVCenter
color: "#2a2a2a" // Define item color
RowLayout {
id: itemContent
implicitWidth: 24
implicitHeight: 24
anchors.centerIn: parent
Text {
// anchors.centerIn: parent
text: UPower.displayDevice.percentage + "%"
color: Common.Colors.colors.primary
font.weight: Font.DemiBold
font.pointSize: 12
}
Item {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Text {
anchors.centerIn: parent
text: root.getBatteryState(UPower.displayDevice.percentage, (UPower.displayDevice.changeRate > 0))
color: root.getBatteryColor(UPower.displayDevice.percentage)
font.weight: Font.DemiBold
font.pointSize: 24/1.4
}
}
}
function getBatteryState(level, isCharging) {
if (level === null || level === 0) {
// Return the battery empty icon
return isCharging ? Common.Icons.battery.charging["1"] : Common.Icons.battery["0"];
}
if (level === 100) {
// Return the battery full icon
return isCharging ? Common.Icons.battery.charging["10"] : Common.Icons.battery["10"];
}
// Calculate step as a value between 1 and 10 (divide level into 10 ranges)
let step = Math.ceil(level / 10); // Range mapping
if (step > 10) step = 10; // Clamp to 10 if it exceeds bounds
// Return the correct icon based on state
return isCharging ? Common.Icons.battery.charging[String(step)] : Common.Icons.battery[String(step)];
}
function getBatteryColor(level) {
if (level === null || level === 0) {
// Use critical color for empty battery
return Common.Colors.colors.critial2;
}
if (level > 0 && level <= 20) {
// Use critical color for low battery
return Common.Colors.colors.critial2;
}
// Default color if no specific condition is met
return Common.Colors.colors.primary;
}
}

View File

@@ -0,0 +1,41 @@
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Services.Pipewire
import "common" as Common
import "clock" as Clock
Rectangle {
id: backgroundRect
implicitWidth: rowLayout.implicitWidth + 6 // Account for padding (2px left + 2px right)
implicitHeight: rowLayout.implicitHeight + 4 // Account for padding (2px top + 2px bottom)
color: Common.Colors.colors.background
radius: 6.5 // Background rectangle with rounded corners
// border.color: "gray"
// border.width: 1
// Inner Rectangle for padding and layout
Rectangle {
id: content
anchors.fill: parent
anchors.margins: 2 // Create 2px padding on all sides
anchors.leftMargin: 3
anchors.rightMargin: 3
color: "transparent"
RowLayout {
id: rowLayout
anchors.fill: parent
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter // Center content
spacing: 10 // Space between items
Audio {}
Battery {}
Common.VerticalSeprator {}
Clock.Date {}
Clock.Clock {}
}
}
}

View File

@@ -0,0 +1,59 @@
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Services.Pipewire
import "common" as Common
Item {
id: root
property PwNode speakerNode: Pipewire.defaultAudioSink
property PwNode microphoneNode: Pipewire.defaultAudioSource
PwObjectTracker {
objects: [root.microphoneNode, root.speakerNode]
}
width: row.width
height: row.height
// console.log("a");
RowLayout {
id: row
Item {
implicitWidth: 28
implicitHeight: 28
Rectangle {
width: parent.width
height: parent.height
radius: 7
color: "black"
}
Text {
anchors.centerIn: parent
font.pixelSize: 28
color: root.speakerNode.audio.muted ? "#B1B2B5" : "white"
font.family: "CaskaydiaCove Nerd Font Mono"
text: root.speakerNode.audio.muted ? Common.Icons.audioIcons.speakerMuted : Common.Icons.audioIcons.speaker
}
}
Item {
implicitWidth: 28
implicitHeight: 28
Rectangle {
width: parent.width
height: parent.height
radius: 7
color: "black"
}
Text {
anchors.centerIn: parent
font.pixelSize: 34
color: root.microphoneNode.audio.muted ? "#B1B2B5" : "white"
font.family: "CaskaydiaCove Nerd Font Mono"
text: root.microphoneNode.audio.muted ? Common.Icons.audioIcons.microphoneMuted : Common.Icons.audioIcons.microphone
}
}
}
}

View File

@@ -0,0 +1,58 @@
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Services.Pipewire
import QtQuick.VectorImage
import QtQuick.Effects
import "common" as Common
Rectangle {
id: root
implicitWidth: itemContent.width + 4
implicitHeight: 24
radius: 5.5
Layout.alignment: Qt.AlignVCenter
color: "#2a2a2a" // Define item color
RowLayout {
id: itemContent
Repeater {
model: [
{
on: "../../assets/bar/V2/speaker.svg",
off: "../../assets/bar/V2/speakerOff.svg",
node: root.speakerNode
},
{
on: "../../assets/bar/V2/mic.svg",
off: "../../assets/bar/V2/micOff.svg",
node: root.microphoneNode
},
]
Item {
implicitWidth: 24
implicitHeight: 24
// anchors.centerIn: parent
VectorImage {
id: svgImage
width: parent.width
height: parent.height
source: modelData.node.audio.muted ? modelData.off : modelData.on
visible: false
fillMode: Image.PreserveAspectFit // Adjusts the SVG while keeping the aspect ratio
}
MultiEffect {
source: svgImage
width: parent.width
height: parent.height
// anchors.centerIn: parent
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
colorization: 1
brightness: 1
colorizationColor: modelData.node.audio.muted ? "#e53b3c" : "#b1b2b5"
}
}
}
}
}

View File

@@ -36,7 +36,7 @@ RowLayout {
Hyprland.dispatch('workspace ' + index_workspace.id); Hyprland.dispatch('workspace ' + index_workspace.id);
} }
for (x in index_workspace.toplevels.values) { for (x in index_workspace.toplevels.values) {
console.log(index_workspace.toplevels.values[x].title) console.log(index_workspace.toplevels.values[x].title);
} }
} }
} }

View File

@@ -1,19 +1,28 @@
import Quickshell import Quickshell
import Quickshell.Io import Quickshell.Io
import QtQuick import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Services.Pipewire
import QtQuick.VectorImage
import QtQuick.Effects
import "common" as Common
import "../common" as Common Rectangle {
Item {
id: root id: root
width: text.width + 15 implicitWidth: clock.width + 4
height: text.height implicitHeight: clock.height
Common.Container {} radius: 5.5
color: "#2a2a2a" // Define item color
Text { Text {
id: clock
// width: parent.width - 4
height: 24
anchors.centerIn: parent anchors.centerIn: parent
id: text verticalAlignment: Qt.AlignVCenter
text: ClockData.time text: ClockData.time
font.pointSize: 10.25 font.pixelSize: 16
color: "white" lineHeight: 1
color: "#cacaca"
} }
} }

View File

@@ -4,16 +4,21 @@ import QtQuick
import "../common" as Common import "../common" as Common
Item { Rectangle {
id: root id: root
width: text.width + 15 implicitWidth: clock.width + 4
height: text.height implicitHeight: clock.height
Common.Container {} radius: 5.5
color: "#2a2a2a" // Define item color
Text { Text {
id: clock
// width: parent.width - 4
height: 24
anchors.centerIn: parent anchors.centerIn: parent
id: text verticalAlignment: Qt.AlignVCenter
text: ClockData.date text: ClockData.date
font.pointSize: 10.25 font.pixelSize: 16
color: "white" lineHeight: 1
color: "#cacaca"
} }
} }

View File

@@ -0,0 +1,14 @@
import Quickshell
import QtQuick
Rectangle {
z: 1
color: "#2a2a2a"
opacity: 20
anchors {
verticalCenter: parent.verticalCenter
}
height: 24
width: parent.width
radius: 5.5
}

View File

@@ -6,7 +6,16 @@ import Quickshell.Io
Singleton { Singleton {
id: root id: root
// XX (alpha) XXXXXX (color)
// For oled screen that risk burn in, set up these colors as semi-transparent and have a rotating wallpaper (!!)
readonly property var colors: ({ readonly property var colors: ({
"primary": "", primary: "#59b1b2b5", // Icons & Text colors
secondary: "#BF2a2a2a", // Pill container colors
background: "#BF000000", // Background of containers
mainBackground: "#20ffffff", // Color of the main bar
warning: "#E9D502", // (i.e battery nearing low)
critial: "#e53b3c", // (i.e battery is low)
critial2: "#e53b3c", // (Speaker and Mic being off)
}) })
} }

View File

@@ -6,11 +6,43 @@ import Quickshell.Io
Singleton { Singleton {
id: root id: root
// readonly property var svgs: ({
// micOff: "../../../assets/bar/V2/micOff.svg",
// mic: "../../../assets/bar/V2/mic.svg",
// speaker: "../../../assets/bar/V2/speaker.svg",
// speakerOff: "../../../assets/bar/V2/speakerOff.svg"
// })
readonly property var battery: ({
"0": "󰂎",
"1": "󰁺",
"2": "󰁻",
"3": "󰁼",
"4": "󰁾",
"5": "󰁾",
"6": "󰁿",
"7": "󰂀",
"8": "󰂁",
"9": "󰂂",
"10": "󰁹",
charging: ({
"1": "󰢜",
"2": "󰂆",
"3": "󰂇",
"4": "󰂈",
"5": "󰢝",
"6": "󰂉",
"7": "󰢞",
"8": "󰂊",
"9": "󰂋",
"10": "󰂅",
})
})
readonly property var audioIcons: ({ readonly property var audioIcons: ({
microphone: "", microphone: "󰍬",
microphoneMuted: "", microphoneMuted: "󰍭",
speaker: "󰕾", speaker: "󰕾",
speakerMuted: "󰖁", speakerMuted: "󰖁"
}) })
// {class}: {icon} // {class}: {icon}

View File

@@ -0,0 +1,30 @@
// ColorOverlayShader.qml
import QtQuick 2.15
Rectangle {
id: mainContent
anchors.fill: parent
color: "blue"
// Clip the rectangle to a shape
clip: true
Shape {
anchors.fill: parent
// Custom Path defined as a vector
Path {
PathSvg {
path: "M10,80 C40,10 65,10 95,80 S150,150 180,80" // Vector path
}
}
ShapePath {
strokeColor: "transparent" // No stroke, act only as the mask
fillColor: "blue"
fillGradient: Gradient {
GradientStop { position: 0.0; color: "yellow" }
GradientStop { position: 1.0; color: "orange" }
}
}
}
}

View File

@@ -0,0 +1,17 @@
import Quickshell
import QtQuick
import QtQuick.Layouts
Item {
RowLayout {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Rectangle {
z: -1
color: "black"
// anchors: parent.anchors
height: 28
width: parent.width
radius: 6.5
}
}

View File

@@ -2,12 +2,16 @@ import Quickshell
import QtQml import QtQml
import QtQuick import QtQuick
Rectangle { Item {
id: a id: root
anchors { anchors {
top: parent.top top: parent.top
bottom: parent.bottom bottom: parent.bottom
} }
width: 2 Rectangle {
anchors.centerIn: root
implicitHeight: root.height - 4
width: 1
color: "#8d8d8d" color: "#8d8d8d"
} }
}