pełna konfiguracja noctalia i czystka waybar, swaync, wlogout i skryptów
This commit is contained in:
34
GarandOS.svg
Normal file
34
GarandOS.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<svg version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<path d="M204.958 225.203L88.751 427.776L61.6218 381.485L92.9365 327.23L30.7418 327.069L17.485 303.936L31.0226 280.277L119.554 280.558L151.369 225.346L204.958 225.203ZM213.875 387.14L446.27 387.151L420.006 433.946L357.665 433.773L388.622 488.074L375.35 511.194L348.228 511.225L304.199 433.912L240.789 433.781L213.875 387.14ZM349.136 298.374L232.949 95.7897L286.345 95.2858L317.364 149.713L348.602 95.5781L375.134 95.5858L388.722 119.218L344.212 196.251L375.808 251.594L349.136 298.374Z" fill-rule="nonzero" transform="matrix(1, 0, 0, 1, 0, 0)" fill="#f87c0e" fill-opacity="1" stroke="#ffffff" stroke-width="0" stroke-linecap="butt" stroke-linejoin="round" opacity="1" id="Ścieżka" />
|
||||
</g>
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<path d="M163.021 308.653L279.209 511.237L225.812 511.741L194.794 457.313L163.556 511.448L137.023 511.441L123.436 487.808L167.946 410.776L136.35 355.433L163.021 308.653ZM297.975 219.375L65.5804 219.364L91.8478 172.572L154.185 172.745L123.228 118.445L136.5 95.3242L163.625 95.2858L207.651 172.599L271.065 172.73L297.979 219.371L297.975 219.375ZM307.042 381.781L423.249 179.205L450.378 225.5L419.06 279.75L481.258 279.916L494.515 303.048L480.977 326.707L392.446 326.426L360.631 381.638L307.042 381.781Z" fill-rule="nonzero" transform="matrix(1, 0, 0, 1, 0, 0)" fill="#d31411" fill-opacity="1" stroke="#ffffff" stroke-width="0" stroke-linecap="butt" stroke-linejoin="round" opacity="1" id="Ścieżka" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<path d="M2450 3260C2088 3214 2045 3204 1575 3048L1180 2917L928 2604C701 2323 658 2256 500 1940L324 1589L214 935L261 647C302 397 315 355 354 329C379 313 421 286 447 269C493 240 499 243 629 364C827 548 853 562 898 503C996 373 2188 395 3060 543C3524 622 4487 845 4562 891C4572 897 4752 924 4963 950C5340 997 5415 1021 5377 1085C5375 1088 5394 1128 5418 1175C5481 1300 5446 1823 5362 2010C5332 2076 5276 2200 5239 2285C5144 2500 4859 2805 4595 2974C4143 3264 3340 3371 2450 3260Z" fill-rule="nonzero" transform="matrix(0.07236655, 0.03395807, 0.03395807, -0.07236655, 1.3727798, 172.38365)" fill="url(#radialGradient0)" stroke="#ffffff" stroke-width="0" stroke-linecap="butt" stroke-linejoin="round" opacity="1" id="Ścieżka" />
|
||||
</g>
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<g opacity="1" id="sex">
|
||||
<path d="M817.655 463.605C817.655 463.605 854.451 461.794 890.298 462.854C920.592 463.75 999.455 459.842 999.455 459.842C999.455 459.842 1003.91 465.764 998.44 470.501C991.48 476.524 965.783 477.134 965.783 477.134C965.783 477.134 887.398 481.385 847.948 482.786C831.474 483.371 827.044 484.107 827.044 484.107C749.409 511.416 382.407 556.101 132.027 514.61C89.434 507.552 75.311 501.175 75.311 501.175C75.311 501.175 69.701 498.783 67.055 497.251C61.505 494.037 59.627 487.436 55.064 485.302C97.102 484.629 200.019 503.974 231.976 506.06C434.227 519.263 787.431 470.57 817.655 463.605Z" fill-rule="nonzero" transform="matrix(0.36220634, 0.1296544, -0.1296544, 0.36220634, 124.92382, -19.742592)" fill="#66403a" fill-opacity="1" stroke="#ffffff" stroke-width="0" stroke-linecap="butt" stroke-linejoin="round" opacity="1" id="Ścieżka" />
|
||||
</g>
|
||||
</g>
|
||||
<g opacity="1" id="Nowy folder">
|
||||
<path d="M673.187 -57.558C673.187 -57.558 612.481 82.106 627.658 249.732C640.891 395.9 728.739 515.282 728.739 515.282C479.26 696.823 247.039 715.481 -25.318 512.668C-25.318 512.668 28.205 384.383 19.217 255.062C10.52 129.933 -83.313 -14.958 -83.313 -14.958C39.333 -197.304 437.51 -263.061 673.187 -57.558Z" fill-rule="nonzero" transform="matrix(0.10106731, 0.015680183, -0.017484369, 0.11269537, 243.86673, 125.96185)" fill="#d5a12b" fill-opacity="1" stroke="#ffffff" stroke-width="0" stroke-linecap="butt" stroke-linejoin="round" opacity="1" id="Ścieżka" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<radialGradient gradientTransform="matrix(-2850.1318, 2233.969, 2233.969, 2850.1318, 3820.5884, 481.4537)" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" id="radialGradient0">
|
||||
<stop stop-color="#8b2928" offset="0%" stop-opacity="1" />
|
||||
<stop stop-color="#842929" offset="54%" stop-opacity="1" />
|
||||
<stop stop-color="#6d272e" offset="100%" stop-opacity="1" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
10
README.md
10
README.md
@@ -1,3 +1,7 @@
|
||||

|
||||
|
||||
---
|
||||
|
||||
# **GarandOS**
|
||||
Disclaimer: This configuration is a fork of [ZaneyOS](https://gitlab.com/Zaney/zaneyos), a wonderful configuration I had the pleasure of ~~stealing~~ forking almost a year ago for my laptop (version 2.2). Now that I've installed NIxOS on my main computer, I've installed the latest version (2.4), connected my repository, and am customizing it to suit my needs. My configuration won't be synchronized with the main project, as it serves as the foundation upon which I'm building my custom system. The original has been stripped of many unnecessary features, so I highly recommend checking out the original project and, like me, adapting it to your needs. If you like my configuration, fork it too and manage it yourself, as the project won't accept external pull requests.
|
||||
|
||||
@@ -183,13 +187,9 @@ git add .
|
||||
- `profile` - graphics card profile, choose the one most suitable for your hardware.
|
||||
- `gitUsername` and `gitEmail` - required for proper git usage.
|
||||
- `extraMonitorSettings` - specify your monitor (cable, resolution, refresh rate. You can leave the other two options).
|
||||
- `clock24h` - whether you want 24 or 12 hour clock.
|
||||
- `browser` - browser package name opened with shortcut **SUPER + W**.
|
||||
- `terminal` - terminal package name opened with shortcut **SUPER + Enter**
|
||||
- `keyboardLayout` and `consoleKeyMap` - keyboard layout (special characters ą,ę, etc.).
|
||||
- `location` - your location.
|
||||
- `stylixImage` - default system wallpaper, based on which the graphical theme (stylix) will be generated. You can browse them in the `wallpapers` folder.
|
||||
- `waybarChoice` - system top bar style.
|
||||
- `animChoice` - system animation style.
|
||||
|
||||
### 5. Review module activation options
|
||||
|
||||
|
||||
44
flake.lock
generated
44
flake.lock
generated
@@ -28,26 +28,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"auto-cpufreq": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769608722,
|
||||
"narHash": "sha256-yWUG0Emd9EuqIZ8jQ6fxqf7USw7Gtcqb4+sBhn+S+Wg=",
|
||||
"owner": "AdnanHodzic",
|
||||
"repo": "auto-cpufreq",
|
||||
"rev": "a11a98c46bf6a77d0c2e0ea8d87acef78507cae5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "AdnanHodzic",
|
||||
"repo": "auto-cpufreq",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16": {
|
||||
"inputs": {
|
||||
"fromYaml": "fromYaml"
|
||||
@@ -583,7 +563,6 @@
|
||||
"root": {
|
||||
"inputs": {
|
||||
"affinity-nix": "affinity-nix",
|
||||
"auto-cpufreq": "auto-cpufreq",
|
||||
"firefox-addons": "firefox-addons",
|
||||
"garandos-tui": "garandos-tui",
|
||||
"home-manager": "home-manager",
|
||||
@@ -591,8 +570,7 @@
|
||||
"nixpkgs": "nixpkgs",
|
||||
"noctalia": "noctalia",
|
||||
"prismlauncher-cracked": "prismlauncher-cracked",
|
||||
"stylix": "stylix",
|
||||
"wrappers": "wrappers"
|
||||
"stylix": "stylix"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
@@ -761,26 +739,6 @@
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"wrappers": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769799671,
|
||||
"narHash": "sha256-b1LwqiIjgNLw6/aJlOwIqe1mfqc4PQqeRpKOo5sFWu0=",
|
||||
"owner": "lassulus",
|
||||
"repo": "wrappers",
|
||||
"rev": "8bef93dddd89a0b45486d5cd9f0bdd5ce8aceced",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lassulus",
|
||||
"repo": "wrappers",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
||||
16
flake.nix
16
flake.nix
@@ -21,8 +21,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
auto-cpufreq = {
|
||||
url = "github:AdnanHodzic/auto-cpufreq";
|
||||
noctalia = {
|
||||
url = "github:noctalia-dev/noctalia-shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
@@ -54,22 +54,11 @@
|
||||
url = "git+https://gitea.garandplg.com/GarandPLG/garandos-tui?ref=main";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
wrappers = {
|
||||
url = "github:lassulus/wrappers";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
noctalia = {
|
||||
url = "github:noctalia-dev/noctalia-shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {
|
||||
nixpkgs,
|
||||
nix-flatpak,
|
||||
auto-cpufreq,
|
||||
garandos-tui,
|
||||
...
|
||||
} @ inputs: let
|
||||
@@ -96,7 +85,6 @@
|
||||
modules = [
|
||||
./profiles/${profile}
|
||||
nix-flatpak.nixosModules.nix-flatpak
|
||||
auto-cpufreq.nixosModules.default
|
||||
garandos-tui.nixosModules.garandos-tui
|
||||
];
|
||||
};
|
||||
|
||||
@@ -20,7 +20,6 @@ _: {
|
||||
btop.enable = true; # Btop: a resource monitor for the terminal
|
||||
cava.enable = false; # Cava: terminal audio visualizer
|
||||
fastfetch.enable = true; # Fastfetch: a fast system information tool
|
||||
peaclock.enable = true; # Peaclock: Clock, timer, and stopwatch for the terminal
|
||||
|
||||
/*
|
||||
Communication and synchronization
|
||||
|
||||
@@ -23,22 +23,11 @@
|
||||
# Inside the quotes, create a new line for each monitor.
|
||||
extraMonitorSettings = "monitor = DP-1,1920x1080@144,auto,1";
|
||||
|
||||
# Waybar Settings
|
||||
clock24h = true;
|
||||
|
||||
# Program Options
|
||||
# Set Default Browser (google-chrome-stable for google-chrome)
|
||||
# This does NOT install your browser
|
||||
# You need to install it by adding it to the `packages.nix`
|
||||
# or as a flatpak
|
||||
browser = "librewolf";
|
||||
|
||||
# Setting it here does not enable it. Kitty is installed by default
|
||||
terminal = "kitty"; # Set Default System Terminal
|
||||
|
||||
keyboardLayout = "pl";
|
||||
consoleKeyMap = "pl";
|
||||
|
||||
location = "Żywiec, PL";
|
||||
|
||||
# For Nvidia Prime support
|
||||
intelID = "PCI:1:0:0";
|
||||
nvidiaID = "PCI:0:2:0";
|
||||
@@ -53,44 +42,19 @@
|
||||
# This will set your color palette
|
||||
# Default background
|
||||
# Add new images to ~/garandos/wallpapers
|
||||
stylixImage = ../../wallpapers/attack-on-titan-mikasa-ackerman.jpg;
|
||||
#stylixImage = ../../wallpapers/DW_Pacts.jpg;
|
||||
#stylixImage = ../../wallpapers/edward-elric-fullmetal-alchemist.jpg;
|
||||
#stylixImage = ../../wallpapers/fire-nation.jpg;
|
||||
#stylixImage = ../../wallpapers/four-elements.jpg;
|
||||
#stylixImage = ../../wallpapers/fullmetal-alchemist-5120x2880-10399.png;
|
||||
#stylixImage = ../../wallpapers/Grounded_Wallpaper_4K.jpg;
|
||||
#stylixImage = ../../wallpapers/jablon.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-log-two.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-one.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-three.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-one.jpg;
|
||||
#stylixImage = ../../wallpapers/1346530.jpeg;
|
||||
|
||||
# Set Waybar
|
||||
# Available Options:
|
||||
waybarChoice = ../../modules/home/waybar/waybar-curved.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs-2.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-simple.nix;
|
||||
# Throwback to GarandOS v1.0
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-jerry.nix;
|
||||
# Very colorful and bright colors
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-nekodyke.nix;
|
||||
# DWM styled waybars from Matt at TheLinuxCast
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm-2.nix;
|
||||
|
||||
# Set Animation style
|
||||
# Available options are:
|
||||
# animations-def.nix (default)
|
||||
# animations-end4.nix (end-4 project very fluid)
|
||||
# animations-dynamic.nix (ml4w project)
|
||||
# animations-moving.nix (ml4w project)
|
||||
# animChoice = ../../modules/home/hyprland/animations-def.nix;
|
||||
animChoice = ../../modules/home/hyprland/animations-end4.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-dynamic.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-moving.nix;
|
||||
stylixImage = "attack-on-titan-mikasa-ackerman.jpg";
|
||||
#stylixImage = "DW_Pacts.jpg";
|
||||
#stylixImage = "edward-elric-fullmetal-alchemist.jpg";
|
||||
#stylixImage = "fire-nation.jpg";
|
||||
#stylixImage = "four-elements.jpg";
|
||||
#stylixImage = "fullmetal-alchemist-5120x2880-10399.png";
|
||||
#stylixImage = "Grounded_Wallpaper_4K.jpg";
|
||||
#stylixImage = "jablon.jpg";
|
||||
#stylixImage = "rammstein-log-two.jpg";
|
||||
#stylixImage = "rammstein-logo-one.jpg";
|
||||
#stylixImage = "rammstein-logo-three.jpg";
|
||||
#stylixImage = "rammstein-one.jpg";
|
||||
#stylixImage = "1346530.jpeg";
|
||||
|
||||
# Set network hostId if required (needed for zfs)
|
||||
# Otherwise leave as-is
|
||||
|
||||
@@ -20,7 +20,6 @@ _: {
|
||||
btop.enable = true; # Btop: a resource monitor for the terminal
|
||||
cava.enable = false; # Cava: terminal audio visualizer
|
||||
fastfetch.enable = true; # Fastfetch: a fast system information tool
|
||||
peaclock.enable = true; # Peaclock: Clock, timer, and stopwatch for the terminal
|
||||
|
||||
/*
|
||||
Communication and synchronization
|
||||
|
||||
@@ -23,22 +23,11 @@
|
||||
# Inside the quotes, create a new line for each monitor.
|
||||
extraMonitorSettings = "monitor = eDP-1,1920x1080@60,auto,1";
|
||||
|
||||
# Waybar Settings
|
||||
clock24h = true;
|
||||
|
||||
# Program Options
|
||||
# Set Default Browser (google-chrome-stable for google-chrome)
|
||||
# This does NOT install your browser
|
||||
# You need to install it by adding it to the `packages.nix`
|
||||
# or as a flatpak
|
||||
browser = "librewolf";
|
||||
|
||||
# Setting it here does not enable it. Kitty is installed by default
|
||||
terminal = "kitty"; # Set Default System Terminal
|
||||
|
||||
keyboardLayout = "pl";
|
||||
consoleKeyMap = "pl";
|
||||
|
||||
location = "Żywiec, PL";
|
||||
|
||||
# For Nvidia Prime support
|
||||
intelID = "PCI:1:0:0";
|
||||
nvidiaID = "PCI:0:2:0";
|
||||
@@ -49,51 +38,23 @@
|
||||
# Enable Printing Support
|
||||
printEnable = false;
|
||||
|
||||
# Themes, waybar and animation.
|
||||
# Only uncomment your selection
|
||||
# The others much be commented out.
|
||||
|
||||
# Set Stylix Image
|
||||
# This will set your color palette
|
||||
# Default background
|
||||
# Add new images to ~/garandos/wallpapers
|
||||
stylixImage = ../../wallpapers/attack-on-titan-mikasa-ackerman.jpg;
|
||||
#stylixImage = ../../wallpapers/DW_Pacts.jpg;
|
||||
#stylixImage = ../../wallpapers/edward-elric-fullmetal-alchemist.jpg;
|
||||
#stylixImage = ../../wallpapers/fire-nation.jpg;
|
||||
#stylixImage = ../../wallpapers/four-elements.jpg;
|
||||
#stylixImage = ../../wallpapers/fullmetal-alchemist-5120x2880-10399.png;
|
||||
#stylixImage = ../../wallpapers/Grounded_Wallpaper_4K.jpg;
|
||||
#stylixImage = ../../wallpapers/jablon.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-log-two.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-one.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-three.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-one.jpg;
|
||||
#stylixImage = ../../wallpapers/1346530.jpeg;
|
||||
|
||||
# Set Waybar
|
||||
# Available Options:
|
||||
waybarChoice = ../../modules/home/waybar/waybar-curved.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs-2.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-simple.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-jerry.nix;
|
||||
# Very colorful and bright colors
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-nekodyke.nix;
|
||||
# DWM styled waybars from Matt at TheLinuxCast
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm-2.nix;
|
||||
|
||||
# Set Animation style
|
||||
# Available options are:
|
||||
# animations-def.nix (default)
|
||||
# animations-end4.nix (end-4 project very fluid)
|
||||
# animations-dynamic.nix (ml4w project)
|
||||
# animations-moving.nix (ml4w project)
|
||||
# animChoice = ../../modules/home/hyprland/animations-def.nix;
|
||||
animChoice = ../../modules/home/hyprland/animations-end4.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-dynamic.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-moving.nix;
|
||||
stylixImage = "attack-on-titan-mikasa-ackerman.jpg";
|
||||
#stylixImage = "DW_Pacts.jpg";
|
||||
#stylixImage = "edward-elric-fullmetal-alchemist.jpg";
|
||||
#stylixImage = "fire-nation.jpg";
|
||||
#stylixImage = "four-elements.jpg";
|
||||
#stylixImage = "fullmetal-alchemist-5120x2880-10399.png";
|
||||
#stylixImage = "Grounded_Wallpaper_4K.jpg";
|
||||
#stylixImage = "jablon.jpg";
|
||||
#stylixImage = "rammstein-log-two.jpg";
|
||||
#stylixImage = "rammstein-logo-one.jpg";
|
||||
#stylixImage = "rammstein-logo-three.jpg";
|
||||
#stylixImage = "rammstein-one.jpg";
|
||||
#stylixImage = "1346530.jpeg";
|
||||
|
||||
# Set network hostId if required (needed for zfs)
|
||||
# Otherwise leave as-is
|
||||
|
||||
@@ -20,7 +20,6 @@ _: {
|
||||
btop.enable = true; # Btop: a resource monitor for the terminal
|
||||
cava.enable = false; # Cava: terminal audio visualizer
|
||||
fastfetch.enable = true; # Fastfetch: a fast system information tool
|
||||
peaclock.enable = true; # Peaclock: Clock, timer, and stopwatch for the terminal
|
||||
|
||||
/*
|
||||
Communication and synchronization
|
||||
|
||||
@@ -25,22 +25,11 @@
|
||||
|
||||
";
|
||||
|
||||
# Waybar Settings
|
||||
clock24h = true;
|
||||
|
||||
# Program Options
|
||||
# Set Default Browser (google-chrome-stable for google-chrome)
|
||||
# This does NOT install your browser
|
||||
# You need to install it by adding it to the `packages.nix`
|
||||
# or as a flatpak
|
||||
browser = "librewolf";
|
||||
|
||||
# Setting it here does not enable it. Kitty is installed by default
|
||||
terminal = "kitty"; # Set Default System Terminal
|
||||
|
||||
keyboardLayout = "pl";
|
||||
consoleKeyMap = "pl";
|
||||
|
||||
location = "Warszawa, PL";
|
||||
|
||||
# For Nvidia Prime support
|
||||
intelID = "PCI:1:0:0";
|
||||
nvidiaID = "PCI:0:2:0";
|
||||
@@ -59,44 +48,19 @@
|
||||
# This will set your color palette
|
||||
# Default background
|
||||
# Add new images to ~/garandos/wallpapers
|
||||
stylixImage = ../../wallpapers/attack-on-titan-mikasa-ackerman.jpg;
|
||||
#stylixImage = ../../wallpapers/DW_Pacts.jpg;
|
||||
#stylixImage = ../../wallpapers/edward-elric-fullmetal-alchemist.jpg;
|
||||
#stylixImage = ../../wallpapers/fire-nation.jpg;
|
||||
#stylixImage = ../../wallpapers/four-elements.jpg;
|
||||
#stylixImage = ../../wallpapers/fullmetal-alchemist-5120x2880-10399.png;
|
||||
#stylixImage = ../../wallpapers/Grounded_Wallpaper_4K.jpg;
|
||||
#stylixImage = ../../wallpapers/jablon.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-log-two.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-one.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-logo-three.jpg;
|
||||
#stylixImage = ../../wallpapers/rammstein-one.jpg;
|
||||
#stylixImage = ../../wallpapers/1346530.jpeg;
|
||||
|
||||
# Set Waybar
|
||||
# Available Options:
|
||||
waybarChoice = ../../modules/home/waybar/waybar-curved.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-ddubs-2.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-simple.nix;
|
||||
# Throwback to GarandOS v1.0
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-jerry.nix;
|
||||
# Very colorful and bright colors
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-nekodyke.nix;
|
||||
# DWM styled waybars from Matt at TheLinuxCast
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm.nix;
|
||||
#waybarChoice = ../../modules/home/waybar/waybar-dwm-2.nix;
|
||||
|
||||
# Set Animation style
|
||||
# Available options are:
|
||||
# animations-def.nix (default)
|
||||
# animations-end4.nix (end-4 project very fluid)
|
||||
# animations-dynamic.nix (ml4w project)
|
||||
# animations-moving.nix (ml4w project)
|
||||
animChoice = ../../modules/home/hyprland/animations-def.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-end4.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-dynamic.nix;
|
||||
#animChoice = ../../modules/home/hyprland/animations-moving.nix;
|
||||
stylixImage = "attack-on-titan-mikasa-ackerman.jpg";
|
||||
#stylixImage = "DW_Pacts.jpg";
|
||||
#stylixImage = "edward-elric-fullmetal-alchemist.jpg";
|
||||
#stylixImage = "fire-nation.jpg";
|
||||
#stylixImage = "four-elements.jpg";
|
||||
#stylixImage = "fullmetal-alchemist-5120x2880-10399.png";
|
||||
#stylixImage = "Grounded_Wallpaper_4K.jpg";
|
||||
#stylixImage = "jablon.jpg";
|
||||
#stylixImage = "rammstein-log-two.jpg";
|
||||
#stylixImage = "rammstein-logo-one.jpg";
|
||||
#stylixImage = "rammstein-logo-three.jpg";
|
||||
#stylixImage = "rammstein-one.jpg";
|
||||
#stylixImage = "1346530.jpeg";
|
||||
|
||||
# Set network hostId if required (needed for zfs)
|
||||
# Otherwise leave as-is
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
_: {
|
||||
programs.auto-cpufreq = {
|
||||
enable = true;
|
||||
settings = {
|
||||
charger = {
|
||||
governor = "performance";
|
||||
turbo = "auto";
|
||||
};
|
||||
|
||||
battery = {
|
||||
governor = "powersave";
|
||||
turbo = "auto";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{inputs, ...}: {
|
||||
imports = [
|
||||
./packages
|
||||
./auto-cpufreq.nix
|
||||
./boot.nix
|
||||
./docker.nix
|
||||
./flatpak.nix
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
system,
|
||||
...
|
||||
}: {
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
mpv
|
||||
pavucontrol
|
||||
@@ -62,6 +57,16 @@
|
||||
matugen
|
||||
app2unit
|
||||
gpu-screen-recorder
|
||||
power-profiles-daemon
|
||||
# hyprland
|
||||
swww
|
||||
grim
|
||||
slurp
|
||||
wl-clipboard
|
||||
swappy
|
||||
ydotool
|
||||
hyprpolkitagent
|
||||
hyprland-qtutils # needed for banners and ANR messages
|
||||
# pyprland
|
||||
pyprland
|
||||
];
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ _: {
|
||||
seahorse.enable = true;
|
||||
fuse.userAllowOther = true;
|
||||
mtr.enable = true;
|
||||
hyprlock.enable = true;
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
{profile, ...}: {
|
||||
{
|
||||
profile,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Services to start
|
||||
services = {
|
||||
libinput.enable = true; # Input Handling
|
||||
@@ -13,10 +17,11 @@
|
||||
};
|
||||
ports = [22];
|
||||
};
|
||||
blueman.enable = true; # Bluetooth Support
|
||||
tumbler.enable = true; # Image/video preview
|
||||
gnome.gnome-keyring.enable = true;
|
||||
|
||||
gnome = {
|
||||
gnome-keyring.enable = true;
|
||||
evolution-data-server.enable = true;
|
||||
};
|
||||
smartd = {
|
||||
enable =
|
||||
if profile == "vm"
|
||||
@@ -53,6 +58,13 @@
|
||||
];
|
||||
};
|
||||
};
|
||||
upower.enable = true; # noctalia shell battery
|
||||
upower = {
|
||||
enable = true;
|
||||
package = pkgs.upower;
|
||||
};
|
||||
power-profiles-daemon = {
|
||||
enable = true;
|
||||
package = pkgs.power-profiles-daemon;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -8,25 +8,7 @@ in {
|
||||
# Styling Options
|
||||
stylix = {
|
||||
enable = true;
|
||||
image = stylixImage;
|
||||
# base16Scheme = {
|
||||
# base00 = "282936";
|
||||
# base01 = "3a3c4e";
|
||||
# base02 = "4d4f68";
|
||||
# base03 = "626483";
|
||||
# base04 = "62d6e8";
|
||||
# base05 = "e9e9f4";
|
||||
# base06 = "f1f2f8";
|
||||
# base07 = "f7f7fb";
|
||||
# base08 = "ea51b2";
|
||||
# base09 = "b45bcf";
|
||||
# base0A = "00f769";
|
||||
# base0B = "ebff87";
|
||||
# base0C = "a1efe4";
|
||||
# base0D = "62d6e8";
|
||||
# base0E = "b45bcf";
|
||||
# base0F = "00f769";
|
||||
# };
|
||||
image = ../../wallpapers/${stylixImage};
|
||||
polarity = "dark";
|
||||
opacity.terminal = 1.0;
|
||||
cursor = {
|
||||
@@ -36,16 +18,16 @@ in {
|
||||
};
|
||||
fonts = {
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
name = "JetBrains Mono";
|
||||
package = pkgs.nerd-fonts.fira-mono;
|
||||
name = "FiraCode Nerd Font Mono";
|
||||
};
|
||||
sansSerif = {
|
||||
package = pkgs.montserrat;
|
||||
name = "Montserrat";
|
||||
package = pkgs.nerd-fonts.fira-code;
|
||||
name = "FiraCode Nerd Font Propo";
|
||||
};
|
||||
serif = {
|
||||
package = pkgs.montserrat;
|
||||
name = "Montserrat";
|
||||
package = pkgs.nerd-fonts.fira-code;
|
||||
name = "FiraCode Nerd Font";
|
||||
};
|
||||
sizes = {
|
||||
applications = 12;
|
||||
|
||||
@@ -24,7 +24,11 @@ in {
|
||||
;
|
||||
};
|
||||
users.${username} = {
|
||||
imports = [./../home ../../hosts/${host}/home-modules.nix];
|
||||
imports = [
|
||||
./../home
|
||||
../../hosts/${host}/home-modules.nix
|
||||
inputs.noctalia.homeModules.default
|
||||
];
|
||||
home = {
|
||||
username = "${username}";
|
||||
homeDirectory = "/home/${username}";
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
pm = "uv run manage.py";
|
||||
f8 = "uv run flake8 .";
|
||||
bbr = "bun --bun run";
|
||||
"ga." = "git add .";
|
||||
mkgidf = "git add . --intent-to-add . && git diff > git-diff.txt";
|
||||
zed = "MANGOHUD=0 /home/${username}/.local/bin/zed";
|
||||
|
||||
# Development aliases for nix flake
|
||||
nd = "nix develop";
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
{host, ...}: let
|
||||
inherit (import ../../hosts/${host}/variables.nix) waybarChoice;
|
||||
in {
|
||||
_: {
|
||||
imports = [
|
||||
./bash
|
||||
./chromium
|
||||
@@ -8,13 +6,9 @@ in {
|
||||
./hyprland
|
||||
./kitty
|
||||
./librewolf
|
||||
./peaclock
|
||||
./rofi
|
||||
./noctalia
|
||||
./scripts
|
||||
./swaync
|
||||
./vscodium
|
||||
waybarChoice
|
||||
./wlogout
|
||||
./xdg
|
||||
./zed
|
||||
./anki.nix
|
||||
@@ -29,10 +23,8 @@ in {
|
||||
./kdeConnect.nix
|
||||
./lutris.nix
|
||||
./nextcloud.nix
|
||||
./noctalia.nix
|
||||
./obs-studio.nix
|
||||
./onlyoffice.nix
|
||||
./overview.nix
|
||||
./qt.nix
|
||||
./ssh.nix
|
||||
./starship.nix
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 31 KiB |
@@ -1,20 +0,0 @@
|
||||
_: {
|
||||
wayland.windowManager.hyprland.settings.animations = {
|
||||
enabled = true;
|
||||
bezier = [
|
||||
"wind, -1.05, 0.9, 0.1, 1.05"
|
||||
"winIn, -1.1, 1.1, 0.1, 1.1"
|
||||
"winOut, -1.3, -0.3, 0, 1"
|
||||
"liner, 0, 1, 1, 1"
|
||||
];
|
||||
animation = [
|
||||
"windows, 0, 6, wind, slide"
|
||||
"windowsIn, 0, 6, winIn, slide"
|
||||
"windowsOut, 0, 5, winOut, slide"
|
||||
"windowsMove, 0, 5, wind, slide"
|
||||
"border, 0, 1, liner"
|
||||
"fade, 0, 10, default"
|
||||
"workspaces, 0, 5, wind"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
_: {
|
||||
# name "Dynamic"
|
||||
wayland.windowManager.hyprland.settings.animations = {
|
||||
enabled = true;
|
||||
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"
|
||||
];
|
||||
animation = [
|
||||
"windows, 1, 6, wind, slide"
|
||||
"windowsIn, 1, 6, winIn, slide"
|
||||
"windowsOut, 1, 5, winOut, slide"
|
||||
"windowsMove, 1, 5, wind, slide"
|
||||
"border, 1, 1, liner"
|
||||
"borderangle, 1, 30, liner, loop"
|
||||
"fade, 1, 10, default"
|
||||
"workspaces, 1, 5, wind"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
_: {
|
||||
# name "moving"
|
||||
wayland.windowManager.hyprland.settings.animations = {
|
||||
enabled = true;
|
||||
bezier = [
|
||||
"overshot, 0.05, 0.9, 0.1, 1.05"
|
||||
"smoothOut, 0.5, 0, 0.99, 0.99"
|
||||
"smoothIn, 0.5, -0.5, 0.68, 1.5"
|
||||
];
|
||||
animation = [
|
||||
"windows, 1, 5, overshot, slide"
|
||||
"windowsOut, 1, 3, smoothOut"
|
||||
"windowsIn, 1, 3, smoothOut"
|
||||
"windowsMove, 1, 4, smoothIn, slide"
|
||||
"border, 1, 5, default"
|
||||
"fade, 1, 5, smoothIn"
|
||||
"fadeDim, 1, 5, smoothIn"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
_: {
|
||||
# Name: END-4
|
||||
wayland.windowManager.hyprland.settings.animations = {
|
||||
enabled = true;
|
||||
bezier = [
|
||||
@@ -1,179 +1,160 @@
|
||||
{
|
||||
host,
|
||||
lib,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
inherit (import ../../../hosts/${host}/variables.nix) browser terminal;
|
||||
desktopEntriesPath = "/home/${username}/.local/state/home-manager/gcroots/current-home/home-path/share/applications/";
|
||||
|
||||
mainBinds = [
|
||||
"SUPER, A, exec, anki #\"Flashcard learning application\""
|
||||
"SUPER, B, exec, bitwarden #\"Password manager\""
|
||||
"SUPER, C, exec, chromium #\"Ungoogled Chromium\""
|
||||
"SUPER, D, exec, vesktop #\"Discord client\""
|
||||
"SUPER, E, exec, noctalia-shell ipc call launcher emoji #\"Emoji picker\""
|
||||
"SUPER, Escape, exec, noctalia-shell ipc call lockScreen lock #\"Lock the screen\""
|
||||
"SUPER, G, exec, affinity-v3 #\"Graphics editor\""
|
||||
"SUPER, I, exec, iotas #\"Note-taking app\""
|
||||
"SUPER, J, exec, Jan #\"Local AI chat interface\""
|
||||
"SUPER, K, exec, galculator #\"Scientific calculator\""
|
||||
"SUPER, L, exec, logseq #\"Knowledge management tool\""
|
||||
"SUPER, M, exec, plexamp #\"Music player for Plex\""
|
||||
"SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop #\"GarandCloud client\""
|
||||
"SUPER, O, exec, onlyoffice-desktopeditors #\"Office suite\""
|
||||
"SUPER, P, exec, plex-desktop #\"Plex media player\""
|
||||
"SUPER, Return, exec, kitty #\"Kitty terminal\""
|
||||
"SUPER, S, exec, steam #\"Steam Game launcher\""
|
||||
"SUPER, T, exec, thunar #\"File manager\""
|
||||
"SUPER, V, exec, codium #\"VS Codium\""
|
||||
"SUPER, W, exec, librewolf #\"Main Web browser (Librewolf)\""
|
||||
"SUPER, Z, exec, zeditor #\"Zed IDE\""
|
||||
];
|
||||
|
||||
shiftBinds = [
|
||||
"SUPER SHIFT, C, exec, dex ${desktopEntriesPath}/claude.desktop #\"Claude AI chat\""
|
||||
"SUPER SHIFT, G, exec, dex ${desktopEntriesPath}/chatgpt.desktop #\"ChatGPT AI chat\""
|
||||
"SUPER SHIFT, K, exec, noctalia-shell ipc call plugin:keybind-cheatsheet toggle #\"Toggle keybind cheatsheet\""
|
||||
"SUPER SHIFT, M, exec, dex ${desktopEntriesPath}/messenger.desktop #\"Facebook Messenger client\""
|
||||
"SUPER SHIFT, N, exec, nextcloud #\"Nextcloud desktop sync client\""
|
||||
"SUPER SHIFT, O, exec, obs #\"Open Broadcaster Software\""
|
||||
"SUPER SHIFT, P, exec, noctalia-shell ipc call volume togglePanel #\"Toggle volume control panel\""
|
||||
"SUPER SHIFT, R, exec, restart.noctalia #\"Restart Noctalia shell\""
|
||||
"SUPER SHIFT, Return, exec, noctalia-shell ipc call launcher toggle #\"Toggle application launcher\""
|
||||
"SUPER SHIFT, S, exec, screenshootin #\"Take screenshot\""
|
||||
"SUPER SHIFT, T, exec, tutanota-desktop #\"Tutanota encrypted email client\""
|
||||
"SUPER SHIFT, V, exec, noctalia-shell ipc call launcher clipboard #\"Open clipboard manager\""
|
||||
];
|
||||
|
||||
altBinds = [
|
||||
"SUPER ALT, C, exec, noctalia-shell ipc call controlCenter toggle #\"Toggle control center\""
|
||||
"SUPER ALT, G, exec, dex ${desktopEntriesPath}/glance.desktop #\"Glance server panel\""
|
||||
"SUPER ALT, M, exec, dex ${desktopEntriesPath}/mastodon.desktop #\"Mastodon social network client\""
|
||||
"SUPER ALT, P, exec, noctalia-shell ipc call settings toggle #\"Open settings panel\""
|
||||
"SUPER ALT, S, exec, slack #\"Slack team communication tool\""
|
||||
"SUPER ALT, T, exec, gedit #\"GNOME text editor\""
|
||||
"SUPER ALT, W, exec, noctalia-shell ipc call wallpaper toggle #\"Toggle wallpaper\""
|
||||
];
|
||||
|
||||
controlBinds = [
|
||||
"SUPER CONTROL, C, exec, noctalia-shell ipc call powerProfile cycle #\"Cycle through power profiles\""
|
||||
"SUPER CONTROL, G, exec, gimp #\"GNU Image Manipulation Program\""
|
||||
"SUPER CONTROL, M, exec, mattermost-desktop #\"Mattermost team chat client\""
|
||||
"SUPER CONTROL, S, exec, signal-desktop #\"Signal encrypted messaging\""
|
||||
"SUPER CONTROL, P, exec, hyprpicker -a #\"Pick color from screen\""
|
||||
];
|
||||
|
||||
windowManagementBinds = [
|
||||
"SUPER, F, fullscreen, #\"Toggle fullscreen mode\""
|
||||
"SUPER, Q, killactive, #\"Close active window\""
|
||||
"SUPER SHIFT, I, togglesplit, #\"Toggle split layout\""
|
||||
"SUPER SHIFT, F, togglefloating, #\"Toggle floating mode\""
|
||||
];
|
||||
|
||||
windowFocusBinds = [
|
||||
"SUPER, down, movefocus, d #\"Move focus down\""
|
||||
"SUPER, left, movefocus, l #\"Move focus left\""
|
||||
"SUPER, right, movefocus, r #\"Move focus right\""
|
||||
"SUPER, up, movefocus, u #\"Move focus up\""
|
||||
];
|
||||
|
||||
windowMovementBinds = [
|
||||
"SUPER SHIFT, down, movewindow, d #\"Move window down\""
|
||||
"SUPER SHIFT, left, movewindow, l #\"Move window left\""
|
||||
"SUPER SHIFT, right, movewindow, r #\"Move window right\""
|
||||
"SUPER SHIFT, up, movewindow, u #\"Move window up\""
|
||||
];
|
||||
|
||||
windowSwapBinds = [
|
||||
"SUPER ALT, down, swapwindow, d #\"Swap active window with window below\""
|
||||
"SUPER ALT, left, swapwindow, l #\"Swap active window with window on the left\""
|
||||
"SUPER ALT, right, swapwindow, r #\"Swap active window with window on the right\""
|
||||
"SUPER ALT, up, swapwindow, u #\"Swap active window with window above\""
|
||||
];
|
||||
|
||||
workspacesSwitchBinds = [
|
||||
"SUPER, 0, workspace, 10 #\"Switch to workspace 10\""
|
||||
"SUPER, 1, workspace, 1 #\"Switch to workspace 1\""
|
||||
"SUPER, 2, workspace, 2 #\"Switch to workspace 2\""
|
||||
"SUPER, 3, workspace, 3 #\"Switch to workspace 3\""
|
||||
"SUPER, 4, workspace, 4 #\"Switch to workspace 4\""
|
||||
"SUPER, 5, workspace, 5 #\"Switch to workspace 5\""
|
||||
"SUPER, 6, workspace, 6 #\"Switch to workspace 6\""
|
||||
"SUPER, 7, workspace, 7 #\"Switch to workspace 7\""
|
||||
"SUPER, 8, workspace, 8 #\"Switch to workspace 8\""
|
||||
"SUPER, 9, workspace, 9 #\"Switch to workspace 9\""
|
||||
"SUPER CONTROL, left, workspace, e-1 #\"Switch to previous workspace\""
|
||||
"SUPER CONTROL, right, workspace, e+1 #\"Switch to next workspace\""
|
||||
"SUPER, mouse_down, workspace, e+1 #\"Switch to next workspace with mouse\""
|
||||
"SUPER, mouse_up, workspace, e-1 #\"Switch to previous workspace with mouse\""
|
||||
];
|
||||
|
||||
workspacesSwapBinds = [
|
||||
"SUPER SHIFT, 0, movetoworkspace, 10 #\"Move active window to workspace 10\""
|
||||
"SUPER SHIFT, 1, movetoworkspace, 1 #\"Move active window to workspace 1\""
|
||||
"SUPER SHIFT, 2, movetoworkspace, 2 #\"Move active window to workspace 2\""
|
||||
"SUPER SHIFT, 3, movetoworkspace, 3 #\"Move active window to workspace 3\""
|
||||
"SUPER SHIFT, 4, movetoworkspace, 4 #\"Move active window to workspace 4\""
|
||||
"SUPER SHIFT, 5, movetoworkspace, 5 #\"Move active window to workspace 5\""
|
||||
"SUPER SHIFT, 6, movetoworkspace, 6 #\"Move active window to workspace 6\""
|
||||
"SUPER SHIFT, 7, movetoworkspace, 7 #\"Move active window to workspace 7\""
|
||||
"SUPER SHIFT, 8, movetoworkspace, 8 #\"Move active window to workspace 8\""
|
||||
"SUPER SHIFT, 9, movetoworkspace, 9 #\"Move active window to workspace 9\""
|
||||
];
|
||||
|
||||
systemMediaAndControllsBinds = [
|
||||
",XF86AudioLowerVolume, exec, noctalia-shell ipc call volume decrease #\"Lower system volume\""
|
||||
",XF86AudioMute, exec, noctalia-shell ipc call volume muteOutput #\"Mute audio output\""
|
||||
",XF86AudioNext, exec, noctalia-shell ipc call media next #\"Next media track\""
|
||||
",XF86AudioPause, exec, noctalia-shell ipc call media pause #\"Pause media playback\""
|
||||
",XF86AudioPlay, exec, noctalia-shell ipc call media play #\"Play media\""
|
||||
",XF86AudioPrev, exec, noctalia-shell ipc call media previous #\"Previous media track\""
|
||||
",XF86AudioRaiseVolume, exec, noctalia-shell ipc call volume increase #\"Raise system volume\""
|
||||
",XF86MonBrightnessDown, exec, noctalia-shell ipc call brightness decrease #\"Decrease screen brightness\""
|
||||
",XF86MonBrightnessUp, exec, noctalia-shell ipc call brightness increase #\"Increase screen brightness\""
|
||||
];
|
||||
|
||||
mkBlock = header: lines:
|
||||
lib.concatLines (
|
||||
["# ${header}"]
|
||||
++ (map (l: "bind = ${l}") lines)
|
||||
);
|
||||
|
||||
fullConfig = lib.concatLines [
|
||||
""
|
||||
(mkBlock "1. MAIN APPS" mainBinds)
|
||||
(mkBlock "2. SHIFT APPS" shiftBinds)
|
||||
(mkBlock "3. ALT APPS" altBinds)
|
||||
(mkBlock "4. CONTROL APPS" controlBinds)
|
||||
(mkBlock "5. WINDOW MANAGEMENT" windowManagementBinds)
|
||||
(mkBlock "6. WINDOWS FOCUS" windowFocusBinds)
|
||||
(mkBlock "7. WINDOWS MOVEMENT" windowMovementBinds)
|
||||
(mkBlock "8. WINDOWS SWAP" windowSwapBinds)
|
||||
(mkBlock "9. WORKSPACES SWITCH" workspacesSwitchBinds)
|
||||
(mkBlock "10. WORKSPACES SWAP" workspacesSwapBinds)
|
||||
(mkBlock "11. SYSTEM MEDIA & CONTROLS" systemMediaAndControllsBinds)
|
||||
];
|
||||
in {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
bind = [
|
||||
# =============================================================================
|
||||
# APLIKACJE - GŁÓWNE
|
||||
# =============================================================================
|
||||
"SUPER, A, exec, anki"
|
||||
"SUPER, B, exec, bitwarden"
|
||||
"SUPER, C, exec, chromium"
|
||||
"SUPER, D, exec, vesktop"
|
||||
"SUPER, G, exec, affinity-v3"
|
||||
"SUPER, I, exec, iotas"
|
||||
"SUPER, J, exec, Jan"
|
||||
"SUPER, L, exec, logseq"
|
||||
"SUPER, M, exec, plexamp"
|
||||
"SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop"
|
||||
"SUPER, O, exec, obs"
|
||||
"SUPER, P, exec, plex-desktop"
|
||||
"SUPER, Return, exec, ${terminal}"
|
||||
"SUPER, S, exec, steam"
|
||||
"SUPER, T, exec, thunar"
|
||||
"SUPER, V, exec, codium"
|
||||
"SUPER, W, exec, ${browser}"
|
||||
"SUPER, Z, exec, zeditor"
|
||||
|
||||
# =============================================================================
|
||||
# APLIKACJE - Z SHIFT
|
||||
# =============================================================================
|
||||
"SUPER SHIFT, B, exec, blueman-manager"
|
||||
"SUPER SHIFT, C, exec, dex ${desktopEntriesPath}/claude.desktop"
|
||||
"SUPER SHIFT, G, exec, dex ${desktopEntriesPath}/chatgpt.desktop"
|
||||
"SUPER SHIFT, M, exec, dex ${desktopEntriesPath}/messenger.desktop"
|
||||
"SUPER SHIFT, N, exec, nextcloud"
|
||||
"SUPER SHIFT, O, exec, onlyoffice-desktopeditors"
|
||||
# "SUPER SHIFT, Return, exec, rofi-launcher"
|
||||
"SUPER SHIFT, T, exec, tutanota-desktop"
|
||||
# "SUPER SHIFT, W, exec, web-search"
|
||||
|
||||
# =============================================================================
|
||||
# APLIKACJE - Z ALT
|
||||
# =============================================================================
|
||||
"SUPER ALT, G, exec, dex ${desktopEntriesPath}/glance.desktop"
|
||||
"SUPER ALT, M, exec, dex ${desktopEntriesPath}/mastodon.desktop"
|
||||
"SUPER ALT, S, exec, slack"
|
||||
"SUPER ALT, T, exec, gedit"
|
||||
|
||||
# =============================================================================
|
||||
# APLIKACJE - Z CONTROL
|
||||
# =============================================================================
|
||||
"SUPER CONTROL, G, exec, gimp"
|
||||
"SUPER CONTROL, M, exec, mattermost-desktop"
|
||||
"SUPER CONTROL, S, exec, signal-desktop"
|
||||
|
||||
# =============================================================================
|
||||
# NARZĘDZIA SYSTEMOWE
|
||||
# =============================================================================
|
||||
"SUPER, E, exec, emopicker9000"
|
||||
"SUPER, K, exec, galculator"
|
||||
"SUPER ALT, W, exec, wallsetter"
|
||||
"SUPER CONTROL, P, exec, hyprpicker -a"
|
||||
"SUPER SHIFT, K, exec, list-keybinds"
|
||||
"SUPER SHIFT, P, exec, pavucontrol"
|
||||
"SUPER SHIFT, S, exec, screenshootin"
|
||||
|
||||
# =============================================================================
|
||||
# ZARZĄDZANIE OKNAMI
|
||||
# =============================================================================
|
||||
"SUPER, Escape, exec, hyprlock"
|
||||
"SUPER, F, fullscreen,"
|
||||
"SUPER, Q, killactive,"
|
||||
"SUPER CONTROL, Escape, exec, wlogout"
|
||||
"SUPER SHIFT, Escape, exit,"
|
||||
"SUPER SHIFT, I, togglesplit,"
|
||||
"SUPER SHIFT, F, togglefloating,"
|
||||
|
||||
# =============================================================================
|
||||
# FOKUS OKIEN
|
||||
# =============================================================================
|
||||
"SUPER, down, movefocus, d"
|
||||
"SUPER, left, movefocus, l"
|
||||
"SUPER, right, movefocus, r"
|
||||
"SUPER, up, movefocus, u"
|
||||
|
||||
# =============================================================================
|
||||
# PRZEMIESZCZANIE OKIEN
|
||||
# =============================================================================
|
||||
"SUPER SHIFT, down, movewindow, d"
|
||||
"SUPER SHIFT, left, movewindow, l"
|
||||
"SUPER SHIFT, right, movewindow, r"
|
||||
"SUPER SHIFT, up, movewindow, u"
|
||||
|
||||
# =============================================================================
|
||||
# ZAMIANA OKIEN
|
||||
# =============================================================================
|
||||
"SUPER ALT, down, swapwindow, d"
|
||||
"SUPER ALT, left, swapwindow, l"
|
||||
"SUPER ALT, right, swapwindow, r"
|
||||
"SUPER ALT, up, swapwindow, u"
|
||||
|
||||
# =============================================================================
|
||||
# WORKSPACES - PRZEŁĄCZANIE
|
||||
# =============================================================================
|
||||
"SUPER, 0, workspace, 10"
|
||||
"SUPER, 1, workspace, 1"
|
||||
"SUPER, 2, workspace, 2"
|
||||
"SUPER, 3, workspace, 3"
|
||||
"SUPER, 4, workspace, 4"
|
||||
"SUPER, 5, workspace, 5"
|
||||
"SUPER, 6, workspace, 6"
|
||||
"SUPER, 7, workspace, 7"
|
||||
"SUPER, 8, workspace, 8"
|
||||
"SUPER, 9, workspace, 9"
|
||||
"SUPER CONTROL, left, workspace, e-1"
|
||||
"SUPER CONTROL, right, workspace, e+1"
|
||||
"SUPER, mouse_down, workspace, e+1"
|
||||
"SUPER, mouse_up, workspace, e-1"
|
||||
|
||||
# =============================================================================
|
||||
# WORKSPACES - PRZENOSZENIE OKIEN
|
||||
# =============================================================================
|
||||
"SUPER SHIFT, 0, movetoworkspace, 10"
|
||||
"SUPER SHIFT, 1, movetoworkspace, 1"
|
||||
"SUPER SHIFT, 2, movetoworkspace, 2"
|
||||
"SUPER SHIFT, 3, movetoworkspace, 3"
|
||||
"SUPER SHIFT, 4, movetoworkspace, 4"
|
||||
"SUPER SHIFT, 5, movetoworkspace, 5"
|
||||
"SUPER SHIFT, 6, movetoworkspace, 6"
|
||||
"SUPER SHIFT, 7, movetoworkspace, 7"
|
||||
"SUPER SHIFT, 8, movetoworkspace, 8"
|
||||
"SUPER SHIFT, 9, movetoworkspace, 9"
|
||||
|
||||
# =============================================================================
|
||||
# MEDIA I KONTROLKI SYSTEMOWE
|
||||
# =============================================================================
|
||||
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
",XF86AudioNext, exec, playerctl next"
|
||||
",XF86AudioPause, exec, playerctl play-pause"
|
||||
",XF86AudioPlay, exec, playerctl play-pause"
|
||||
",XF86AudioPrev, exec, playerctl previous"
|
||||
",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||
",XF86MonBrightnessDown, exec, brightnessctl set 5%-"
|
||||
",XF86MonBrightnessUp, exec, brightnessctl set +5%"
|
||||
|
||||
# =============================================================================
|
||||
# NOCTALIA SHELL
|
||||
# =============================================================================
|
||||
"SUPER SHIFT, Return, exec, noctalia-shell ipc call launcher toggle"
|
||||
# "SUPER, M, Noctalia Notifications, exec, noctalia-shell ipc call notifications toggleHistory"
|
||||
"SUPER SHIFT, V, exec, noctalia-shell ipc call launcher clipboard"
|
||||
"SUPER ALT, P, exec, noctalia-shell ipc call settings toggle"
|
||||
"SUPER ALT, L, exec, noctalia-shell ipc call sessionMenu lockAndSuspend"
|
||||
"SUPER SHIFT, W, exec, noctalia-shell ipc call wallpaper toggle"
|
||||
"SUPER, X, exec, noctalia-shell ipc call sessionMenu toggle"
|
||||
"SUPER ALT, C, exec, noctalia-shell ipc call controlCenter toggle"
|
||||
"SUPER CTRL, R, exec, noctalia-shell ipc call screenRecorder toggle"
|
||||
"SUPER SHIFT, R, exec, restart.noctalia"
|
||||
|
||||
# =============================================================================
|
||||
# NIEUŻYWANE KEYBINDY
|
||||
# =============================================================================
|
||||
# "SUPER SHIFT, N, exec, swaync-client -rs"
|
||||
# "SUPER, P, pseudo,"
|
||||
# "SUPER ALT,F, workspaceopt, allfloat"
|
||||
# "SUPER SHIFT, SPACE, movetoworkspace, special"
|
||||
# "SUPER, SPACE, togglespecialworkspace"
|
||||
# "ALT,Tab,cyclenext"
|
||||
# "ALT,Tab,bringactivetotop"
|
||||
];
|
||||
extraConfig = fullConfig;
|
||||
|
||||
bindm = [
|
||||
"SUPER, mouse:272, movewindow"
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
{host, ...}: let
|
||||
inherit (import ../../../hosts/${host}/variables.nix) animChoice;
|
||||
in {
|
||||
_: {
|
||||
imports = [
|
||||
animChoice
|
||||
./animations.nix
|
||||
./binds.nix
|
||||
./env.nix
|
||||
./exec-once.nix
|
||||
./hypridle.nix
|
||||
./hyprland.nix
|
||||
./hyprlock.nix
|
||||
./pyprland.nix
|
||||
./windowrules.nix
|
||||
];
|
||||
|
||||
@@ -22,10 +22,6 @@ _: {
|
||||
"GDK_SCALE,1"
|
||||
"QT_SCALE_FACTOR,1"
|
||||
"EDITOR,nano"
|
||||
# Set terminal and xdg_terminal_emulator to kitty
|
||||
# To provent yazi from starting xterm when run from rofi menu
|
||||
# You can set to your preferred terminal if you you like
|
||||
# ToDo: Pull default terminal from config
|
||||
"TERMINAL,kitty"
|
||||
"XDG_TERMINAL_EMULATOR,kitty"
|
||||
];
|
||||
|
||||
@@ -1,28 +1,15 @@
|
||||
{host, ...}: let
|
||||
inherit
|
||||
(import ../../../hosts/${host}/variables.nix)
|
||||
stylixImage
|
||||
;
|
||||
in {
|
||||
_: {
|
||||
wayland.windowManager.hyprland.settings.exec-once = [
|
||||
"wl-paste --type text --watch cliphist store" # Saves text
|
||||
"wl-paste --type image --watch cliphist store" # Saves images
|
||||
"dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
||||
"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
||||
"systemctl --user start hyprpolkitagent"
|
||||
"qs -c overview" # Start quickshell-overview daemon
|
||||
|
||||
# "killall -q swww;sleep .5 && swww-daemon"
|
||||
# "killall -q waybar;sleep .5 && waybar"
|
||||
# "killall -q swaync;sleep .5 && swaync"
|
||||
# "#wallsetter &"
|
||||
# "pypr &"
|
||||
# "nm-applet --indicator"
|
||||
# "sleep 1.0 && swww img ${stylixImage}"
|
||||
"killall -q waybar"
|
||||
"pkill waybar"
|
||||
"killall -q swaync"
|
||||
"pkill swaync"
|
||||
# "killall -q waybar"
|
||||
# "pkill waybar"
|
||||
# "killall -q swaync"
|
||||
# "pkill swaync"
|
||||
"noctalia-shell &"
|
||||
];
|
||||
}
|
||||
|
||||
@@ -5,13 +5,8 @@ _: {
|
||||
general = {
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||
ignore_dbus_inhibit = false;
|
||||
lock_cmd = "hyprlock";
|
||||
};
|
||||
listener = [
|
||||
{
|
||||
timeout = 900;
|
||||
on-timeout = "hyprlock";
|
||||
}
|
||||
{
|
||||
timeout = 1200;
|
||||
on-timeout = "hyprctl dispatch dpms off";
|
||||
|
||||
@@ -94,10 +94,12 @@ in {
|
||||
|
||||
decoration = {
|
||||
rounding = 10;
|
||||
rounding_power = 2;
|
||||
blur = {
|
||||
enabled = true;
|
||||
size = 5;
|
||||
passes = 3;
|
||||
vibrancy = 0.1696;
|
||||
ignore_opacity = false;
|
||||
new_optimizations = true;
|
||||
};
|
||||
@@ -145,9 +147,7 @@ in {
|
||||
monitor=,preferred,auto,auto
|
||||
monitor=Virtual-1,1920x1080@60,auto,1
|
||||
${extraMonitorSettings}
|
||||
# To enable blur on waybar uncomment the line below
|
||||
# Thanks to SchotjeChrisman
|
||||
#layerrule = blur,waybar
|
||||
layerrule = blur on, blur_popups on, ignore_alpha 0.5, match:namespace noctalia-background-\.*$
|
||||
";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
{username, ...}: {
|
||||
programs.hyprlock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
disable_loading_bar = true;
|
||||
grace = 10;
|
||||
hide_cursor = true;
|
||||
no_fade_in = false;
|
||||
};
|
||||
background = [
|
||||
{
|
||||
path = "/home/${username}/Pictures/Wallpapers/four-elements.jpg";
|
||||
blur_passes = 3;
|
||||
blur_size = 8;
|
||||
}
|
||||
];
|
||||
image = [
|
||||
{
|
||||
path = "/home/${username}/.config/face.jpg";
|
||||
size = 150;
|
||||
border_size = 4;
|
||||
border_color = "rgb(0C96F9)";
|
||||
rounding = -1; # Negative means circle
|
||||
position = "0, 200";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
];
|
||||
input-field = [
|
||||
{
|
||||
size = "200, 50";
|
||||
position = "0, -80";
|
||||
monitor = "";
|
||||
dots_center = true;
|
||||
fade_on_empty = false;
|
||||
font_color = "rgb(CFE6F4)";
|
||||
inner_color = "rgb(657DC2)";
|
||||
outer_color = "rgb(0D0E15)";
|
||||
outline_thickness = 5;
|
||||
placeholder_text = "Password...";
|
||||
shadow_passes = 2;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -30,11 +30,10 @@ _: {
|
||||
"tag +settings, match:class gnome-disks|wihotspot(-gui)?"
|
||||
"tag +settings, match:class [Rr]ofi"
|
||||
"tag +settings, match:class file-roller|org\.gnome\.FileRoller"
|
||||
"tag +settings, match:class nm-applet|nm-connection-editor|blueman-manager"
|
||||
"tag +settings, match:class nm-applet|nm-connection-editor"
|
||||
"tag +settings, match:class pavucontrol|org\.pulseaudio\.pavucontrol|com\.saivert\.pwvucontrol"
|
||||
"tag +settings, match:class nwg-look|qt5ct|qt6ct|[Yy]ad"
|
||||
"tag +settings, match:class xdg-desktop-portal-gtk"
|
||||
"tag +settings, match:class ?:blueman-manager-wrapped"
|
||||
"tag +settings, match:class nwg-displays"
|
||||
|
||||
# Position and movement rules
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
system,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
noctalia = inputs.noctalia.packages.${system}.default;
|
||||
configDir = "${noctalia}/share/noctalia-shell";
|
||||
in {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
noctalia
|
||||
quickshell # Ensure quickshell is available for the service
|
||||
];
|
||||
activation.seedNoctaliaShellCode = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||
set -eu
|
||||
DEST="$HOME/.config/quickshell/noctalia-shell"
|
||||
SRC="${configDir}"
|
||||
|
||||
if [ ! -d "$DEST" ]; then
|
||||
$DRY_RUN_CMD mkdir -p "$HOME/.config/quickshell"
|
||||
$DRY_RUN_CMD cp -R "$SRC" "$DEST"
|
||||
$DRY_RUN_CMD chmod -R u+rwX "$DEST"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
}
|
||||
33
modules/home/noctalia/colors.nix
Normal file
33
modules/home/noctalia/colors.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
stylix = config.stylix.base16Scheme;
|
||||
in {
|
||||
programs.noctalia-shell.colors = lib.mkForce {
|
||||
mPrimary = "#${stylix.base04}";
|
||||
mOnPrimary = "#${stylix.base00}";
|
||||
|
||||
mSecondary = "#${stylix.base05}";
|
||||
mOnSecondary = "#${stylix.base00}";
|
||||
|
||||
mTertiary = "#${stylix.base03}";
|
||||
mOnTertiary = "#${stylix.base00}";
|
||||
|
||||
mError = "#${stylix.base02}";
|
||||
mOnError = "#${stylix.base00}";
|
||||
|
||||
mSurface = "#${stylix.base01}";
|
||||
mOnSurface = "#${stylix.base0E}";
|
||||
|
||||
mSurfaceVariant = "#${stylix.base00}";
|
||||
mOnSurfaceVariant = "#${stylix.base0A}";
|
||||
|
||||
mOutline = "#${stylix.base08}";
|
||||
mShadow = "#${stylix.base00}";
|
||||
|
||||
mOnHover = "#${stylix.base0B}";
|
||||
mHover = "#${stylix.base00}";
|
||||
};
|
||||
}
|
||||
21
modules/home/noctalia/default.nix
Normal file
21
modules/home/noctalia/default.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
lib,
|
||||
inputs,
|
||||
system,
|
||||
...
|
||||
}: {
|
||||
programs.noctalia-shell = {
|
||||
enable = true;
|
||||
package = inputs.noctalia.packages.${system}.default.override {
|
||||
calendarSupport = true;
|
||||
};
|
||||
systemd.enable = true;
|
||||
settings.settingsVersion = lib.mkForce 46;
|
||||
};
|
||||
|
||||
imports = [
|
||||
./settings
|
||||
./colors.nix
|
||||
./plugins.nix
|
||||
];
|
||||
}
|
||||
40
modules/home/noctalia/plugins.nix
Normal file
40
modules/home/noctalia/plugins.nix
Normal file
@@ -0,0 +1,40 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell = lib.mkForce {
|
||||
plugins = {
|
||||
sources = [
|
||||
{
|
||||
enabled = true;
|
||||
name = "Noctalia Plugins";
|
||||
url = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
}
|
||||
];
|
||||
states = {
|
||||
mini-docker = {
|
||||
enabled = true;
|
||||
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
};
|
||||
timer = {
|
||||
enabled = true;
|
||||
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
};
|
||||
keybind-cheatsheet = {
|
||||
enabled = true;
|
||||
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||
};
|
||||
};
|
||||
version = 1;
|
||||
};
|
||||
pluginSettings = {
|
||||
mini-docker.refreshInterval = 5000;
|
||||
timer.compactMode = true;
|
||||
keybind-cheatsheet = {
|
||||
niriConfigPath = "~/.config/niri/config.kdl";
|
||||
hyprlandConfigPath = "~/.config/hypr/hyprland.conf";
|
||||
modKeyVariable = "SUPER";
|
||||
windowHeight = 850;
|
||||
windowWidth = 700;
|
||||
autoHeight = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
25
modules/home/noctalia/settings/app-launcher.nix
Normal file
25
modules/home/noctalia/settings/app-launcher.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.appLauncher = lib.mkForce {
|
||||
enableClipboardHistory = true;
|
||||
autoPasteClipboard = false;
|
||||
enableClipPreview = true;
|
||||
clipboardWrapText = true;
|
||||
clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store";
|
||||
clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store";
|
||||
position = "center";
|
||||
pinnedApps = [];
|
||||
useApp2Unit = true;
|
||||
sortByMostUsed = true;
|
||||
terminalCommand = "kitty -e";
|
||||
customLaunchPrefixEnabled = false;
|
||||
customLaunchPrefix = "";
|
||||
viewMode = "list";
|
||||
showCategories = true;
|
||||
iconMode = "native";
|
||||
showIconBackground = false;
|
||||
enableSettingsSearch = true;
|
||||
enableWindowsSearch = true;
|
||||
ignoreMouseInput = false;
|
||||
screenshotAnnotationTool = "";
|
||||
};
|
||||
}
|
||||
11
modules/home/noctalia/settings/audio.nix
Normal file
11
modules/home/noctalia/settings/audio.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.audio = lib.mkForce {
|
||||
"volumeStep" = 5;
|
||||
"volumeOverdrive" = true;
|
||||
"cavaFrameRate" = 144;
|
||||
"visualizerType" = "linear";
|
||||
"mprisBlacklist" = [];
|
||||
"preferredPlayer" = "mpv";
|
||||
"volumeFeedback" = false;
|
||||
};
|
||||
}
|
||||
33
modules/home/noctalia/settings/bar/default.nix
Normal file
33
modules/home/noctalia/settings/bar/default.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
lib,
|
||||
username,
|
||||
...
|
||||
}: {
|
||||
programs.noctalia-shell.settings.bar = lib.mkForce {
|
||||
barType = "simple";
|
||||
position = "top";
|
||||
monitors = [];
|
||||
density = "default";
|
||||
showOutline = false;
|
||||
showCapsule = true;
|
||||
capsuleOpacity = 0;
|
||||
backgroundOpacity = 0;
|
||||
useSeparateOpacity = true;
|
||||
floating = false;
|
||||
marginVertical = 4;
|
||||
marginHorizontal = 4;
|
||||
frameThickness = 8;
|
||||
frameRadius = 12;
|
||||
outerCorners = true;
|
||||
hideOnOverview = false;
|
||||
displayMode = "always_visible";
|
||||
autoHideDelay = 500;
|
||||
autoShowDelay = 150;
|
||||
screenOverrides = [];
|
||||
widgets = {
|
||||
left = (import ./widgets/left.nix {}).left;
|
||||
center = (import ./widgets/center.nix {}).center;
|
||||
right = (import ./widgets/right.nix {inherit username;}).right;
|
||||
};
|
||||
};
|
||||
}
|
||||
23
modules/home/noctalia/settings/bar/widgets/center.nix
Normal file
23
modules/home/noctalia/settings/bar/widgets/center.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
_: {
|
||||
center = [
|
||||
{
|
||||
id = "Workspace";
|
||||
characterCount = 2;
|
||||
colorizeIcons = false;
|
||||
emptyColor = "secondary";
|
||||
enableScrollWheel = true;
|
||||
focusedColor = "primary";
|
||||
followFocusedScreen = false;
|
||||
groupedBorderOpacity = 0;
|
||||
hideUnoccupied = false;
|
||||
iconScale = 1;
|
||||
labelMode = "index";
|
||||
occupiedColor = "secondary";
|
||||
reverseScroll = false;
|
||||
showApplications = true;
|
||||
showBadge = true;
|
||||
showLabelsOnlyWhenOccupied = true;
|
||||
unfocusedIconsOpacity = 1;
|
||||
}
|
||||
];
|
||||
}
|
||||
57
modules/home/noctalia/settings/bar/widgets/left.nix
Normal file
57
modules/home/noctalia/settings/bar/widgets/left.nix
Normal file
@@ -0,0 +1,57 @@
|
||||
_: {
|
||||
left = [
|
||||
{
|
||||
id = "Launcher";
|
||||
icon = "rocket";
|
||||
usePrimaryColor = true;
|
||||
}
|
||||
{
|
||||
id = "Clock";
|
||||
customFont = "";
|
||||
formatHorizontal = "HH:mm:ss";
|
||||
formatVertical = "HH mm ss - ddd MMM d";
|
||||
tooltipFormat = "ddd MMM d HH:mm:ss";
|
||||
useCustomFont = false;
|
||||
usePrimaryColor = false;
|
||||
}
|
||||
{
|
||||
id = "SystemMonitor";
|
||||
compactMode = true;
|
||||
diskPath = "/home";
|
||||
showCpuFreq = false;
|
||||
showCpuTemp = false;
|
||||
showCpuUsage = true;
|
||||
showDiskAsFree = true;
|
||||
showDiskUsage = true;
|
||||
showGpuTemp = false;
|
||||
showLoadAverage = false;
|
||||
showMemoryAsPercent = false;
|
||||
showMemoryUsage = true;
|
||||
showNetworkStats = true;
|
||||
showSwapUsage = false;
|
||||
useMonospaceFont = true;
|
||||
usePrimaryColor = false;
|
||||
}
|
||||
{
|
||||
id = "plugin:mini-docker";
|
||||
}
|
||||
{
|
||||
id = "MediaMini";
|
||||
compactMode = true;
|
||||
compactShowAlbumArt = true;
|
||||
compactShowVisualizer = true;
|
||||
hideMode = "hidden";
|
||||
hideWhenIdle = false;
|
||||
maxWidth = 145;
|
||||
panelShowAlbumArt = true;
|
||||
panelShowVisualizer = true;
|
||||
scrollingMode = "hover";
|
||||
showAlbumArt = true;
|
||||
showArtistFirst = true;
|
||||
showProgressRing = true;
|
||||
showVisualizer = true;
|
||||
useFixedWidth = false;
|
||||
visualizerType = "linear";
|
||||
}
|
||||
];
|
||||
}
|
||||
61
modules/home/noctalia/settings/bar/widgets/right.nix
Normal file
61
modules/home/noctalia/settings/bar/widgets/right.nix
Normal file
@@ -0,0 +1,61 @@
|
||||
{username, ...}: {
|
||||
right = [
|
||||
{
|
||||
id = "Tray";
|
||||
blacklist = [];
|
||||
colorizeIcons = false;
|
||||
drawerEnabled = false;
|
||||
hidePassive = false;
|
||||
pinned = [];
|
||||
}
|
||||
{
|
||||
id = "plugin:keybind-cheatsheet";
|
||||
}
|
||||
{
|
||||
id = "plugin:timer";
|
||||
defaultSettings = {
|
||||
compactMode = true;
|
||||
defaultDuration = 0;
|
||||
};
|
||||
}
|
||||
{
|
||||
id = "NotificationHistory";
|
||||
hideWhenZero = false;
|
||||
hideWhenZeroUnread = false;
|
||||
showUnreadBadge = true;
|
||||
unreadBadgeColor = "primary";
|
||||
}
|
||||
{
|
||||
id = "Bluetooth";
|
||||
displayMode = "onhover";
|
||||
}
|
||||
{
|
||||
id = "Battery";
|
||||
deviceNativePath = "__default__";
|
||||
displayMode = "onhover";
|
||||
hideIfIdle = false;
|
||||
hideIfNotDetected = true;
|
||||
showNoctaliaPerformance = false;
|
||||
showPowerProfiles = false;
|
||||
warningThreshold = 30;
|
||||
}
|
||||
{
|
||||
id = "Volume";
|
||||
displayMode = "alwaysShow";
|
||||
middleClickCommand = "pwvucontrol || pavucontrol";
|
||||
}
|
||||
# {
|
||||
# "id" = "Brightness";
|
||||
# "displayMode" = "onhover";
|
||||
# }
|
||||
{
|
||||
id = "ControlCenter";
|
||||
colorizeDistroLogo = false;
|
||||
colorizeSystemIcon = "none";
|
||||
customIconPath = "/home/${username}/garandos/GarandOS.svg";
|
||||
enableColorization = false;
|
||||
icon = "noctalia";
|
||||
useDistroLogo = false;
|
||||
}
|
||||
];
|
||||
}
|
||||
7
modules/home/noctalia/settings/brightness.nix
Normal file
7
modules/home/noctalia/settings/brightness.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.brightness = lib.mkForce {
|
||||
brightnessStep = 5;
|
||||
enforceMinimum = true;
|
||||
enableDdcSupport = true;
|
||||
};
|
||||
}
|
||||
16
modules/home/noctalia/settings/calendar.nix
Normal file
16
modules/home/noctalia/settings/calendar.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.calendar.cards = lib.mkForce [
|
||||
{
|
||||
enabled = true;
|
||||
id = "calendar-header-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "calendar-month-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "weather-card";
|
||||
}
|
||||
];
|
||||
}
|
||||
12
modules/home/noctalia/settings/color-schemes.nix
Normal file
12
modules/home/noctalia/settings/color-schemes.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.colorSchemes = lib.mkForce {
|
||||
useWallpaperColors = false;
|
||||
predefinedScheme = "Noctalia (default)";
|
||||
darkMode = true;
|
||||
schedulingMode = "off";
|
||||
manualSunrise = "06:30";
|
||||
manualSunset = "18:30";
|
||||
generationMethod = "tonal-spot";
|
||||
monitorForColors = "";
|
||||
};
|
||||
}
|
||||
62
modules/home/noctalia/settings/control-center.nix
Normal file
62
modules/home/noctalia/settings/control-center.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.controlCenter = lib.mkForce {
|
||||
position = "close_to_bar_button";
|
||||
diskPath = "/home";
|
||||
shortcuts = {
|
||||
left = [
|
||||
{
|
||||
id = "Network";
|
||||
}
|
||||
{
|
||||
id = "Bluetooth";
|
||||
}
|
||||
{
|
||||
id = "WallpaperSelector";
|
||||
}
|
||||
{
|
||||
id = "NoctaliaPerformance";
|
||||
}
|
||||
];
|
||||
right = [
|
||||
{
|
||||
id = "Notifications";
|
||||
}
|
||||
{
|
||||
id = "PowerProfile";
|
||||
}
|
||||
{
|
||||
id = "KeepAwake";
|
||||
}
|
||||
{
|
||||
id = "NightLight";
|
||||
}
|
||||
];
|
||||
};
|
||||
cards = [
|
||||
{
|
||||
enabled = true;
|
||||
id = "profile-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "shortcuts-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "audio-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "brightness-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "weather-card";
|
||||
}
|
||||
{
|
||||
enabled = true;
|
||||
id = "media-sysmon-card";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
25
modules/home/noctalia/settings/default.nix
Normal file
25
modules/home/noctalia/settings/default.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
_: {
|
||||
imports = [
|
||||
./bar
|
||||
./notifications
|
||||
./app-launcher.nix
|
||||
./audio.nix
|
||||
./brightness.nix
|
||||
./calendar.nix
|
||||
./color-schemes.nix
|
||||
./control-center.nix
|
||||
./desktop-widgets.nix
|
||||
./dock.nix
|
||||
./general.nix
|
||||
./hooks.nix
|
||||
./location.nix
|
||||
./network.nix
|
||||
./night-light.nix
|
||||
./osd.nix
|
||||
./session-menu.nix
|
||||
./system-monitor.nix
|
||||
./templates.nix
|
||||
./ui.nix
|
||||
./wallpapers.nix
|
||||
];
|
||||
}
|
||||
7
modules/home/noctalia/settings/desktop-widgets.nix
Normal file
7
modules/home/noctalia/settings/desktop-widgets.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.desktop-widgets = lib.mkForce {
|
||||
"enabled" = false;
|
||||
"gridSnap" = false;
|
||||
"monitorWidgets" = [];
|
||||
};
|
||||
}
|
||||
18
modules/home/noctalia/settings/dock.nix
Normal file
18
modules/home/noctalia/settings/dock.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.dock = lib.mkForce {
|
||||
enabled = false;
|
||||
position = "bottom";
|
||||
displayMode = "auto_hide";
|
||||
backgroundOpacity = 0;
|
||||
floatingRatio = 1;
|
||||
size = 1.5;
|
||||
onlySameOutput = false;
|
||||
monitors = [];
|
||||
pinnedApps = [];
|
||||
colorizeIcons = false;
|
||||
pinnedStatic = false;
|
||||
inactiveIndicators = false;
|
||||
deadOpacity = 0.5;
|
||||
animationSpeed = 1;
|
||||
};
|
||||
}
|
||||
38
modules/home/noctalia/settings/general.nix
Normal file
38
modules/home/noctalia/settings/general.nix
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
lib,
|
||||
host,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
inherit (import ../../../../hosts/${host}/variables.nix) keyboardLayout;
|
||||
in {
|
||||
programs.noctalia-shell.settings.general = lib.mkForce {
|
||||
avatarImage = "/home/${username}/.face.icon";
|
||||
dimmerOpacity = 0.2;
|
||||
showScreenCorners = false;
|
||||
forceBlackScreenCorners = false;
|
||||
scaleRatio = 1;
|
||||
radiusRatio = 2;
|
||||
iRadiusRatio = 2;
|
||||
boxRadiusRatio = 1;
|
||||
screenRadiusRatio = 1;
|
||||
animationSpeed = 1;
|
||||
animationDisabled = false;
|
||||
compactLockScreen = false;
|
||||
lockOnSuspend = true;
|
||||
showSessionButtonsOnLockScreen = true;
|
||||
showHibernateOnLockScreen = false;
|
||||
enableShadows = true;
|
||||
shadowDirection = "bottom_right";
|
||||
shadowOffsetX = 2;
|
||||
shadowOffsetY = 3;
|
||||
language = "${keyboardLayout}";
|
||||
allowPanelsOnScreenWithoutBar = true;
|
||||
showChangelogOnStartup = true;
|
||||
telemetryEnabled = false;
|
||||
enableLockScreenCountdown = true;
|
||||
lockScreenCountdownDuration = 10000;
|
||||
autoStartAuth = false;
|
||||
allowPasswordWithFprintd = false;
|
||||
};
|
||||
}
|
||||
13
modules/home/noctalia/settings/hooks.nix
Normal file
13
modules/home/noctalia/settings/hooks.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.hooks = lib.mkForce {
|
||||
"enabled" = false;
|
||||
"wallpaperChange" = "";
|
||||
"darkModeChange" = "";
|
||||
"screenLock" = "";
|
||||
"screenUnlock" = "";
|
||||
"performanceModeEnabled" = "";
|
||||
"performanceModeDisabled" = "";
|
||||
"startup" = "";
|
||||
"session" = "";
|
||||
};
|
||||
}
|
||||
22
modules/home/noctalia/settings/location.nix
Normal file
22
modules/home/noctalia/settings/location.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
lib,
|
||||
host,
|
||||
...
|
||||
}: let
|
||||
inherit (import ../../../../hosts/${host}/variables.nix) location;
|
||||
in {
|
||||
programs.noctalia-shell.settings.location = lib.mkForce {
|
||||
name = "${location}";
|
||||
weatherEnabled = true;
|
||||
weatherShowEffects = true;
|
||||
useFahrenheit = false;
|
||||
use12hourFormat = false;
|
||||
showWeekNumberInCalendar = false;
|
||||
showCalendarEvents = true;
|
||||
showCalendarWeather = true;
|
||||
analogClockInCalendar = false;
|
||||
firstDayOfWeek = -1;
|
||||
hideWeatherTimezone = false;
|
||||
hideWeatherCityName = false;
|
||||
};
|
||||
}
|
||||
10
modules/home/noctalia/settings/network.nix
Normal file
10
modules/home/noctalia/settings/network.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.network = lib.mkForce {
|
||||
wifiEnabled = true;
|
||||
bluetoothRssiPollingEnabled = true;
|
||||
bluetoothRssiPollIntervalMs = 10000;
|
||||
wifiDetailsViewMode = "grid";
|
||||
bluetoothDetailsViewMode = "grid";
|
||||
bluetoothHideUnnamedDevices = false;
|
||||
};
|
||||
}
|
||||
11
modules/home/noctalia/settings/night-light.nix
Normal file
11
modules/home/noctalia/settings/night-light.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.nightLight = lib.mkForce {
|
||||
"enabled" = false;
|
||||
"forced" = false;
|
||||
"autoSchedule" = true;
|
||||
"nightTemp" = "4177";
|
||||
"dayTemp" = "6500";
|
||||
"manualSunrise" = "06:30";
|
||||
"manualSunset" = "18:30";
|
||||
};
|
||||
}
|
||||
33
modules/home/noctalia/settings/notifications/default.nix
Normal file
33
modules/home/noctalia/settings/notifications/default.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
lib,
|
||||
username,
|
||||
...
|
||||
}: {
|
||||
programs.noctalia-shell.settings.notifications = lib.mkForce {
|
||||
enabled = true;
|
||||
monitors = [];
|
||||
location = "top_right";
|
||||
overlayLayer = true;
|
||||
backgroundOpacity = 0;
|
||||
respectExpireTimeout = false;
|
||||
lowUrgencyDuration = 3;
|
||||
normalUrgencyDuration = 8;
|
||||
criticalUrgencyDuration = 15;
|
||||
enableKeyboardLayoutToast = false;
|
||||
saveToHistory = {
|
||||
low = true;
|
||||
normal = true;
|
||||
critical = true;
|
||||
};
|
||||
sounds = {
|
||||
enabled = true;
|
||||
volume = 0.5;
|
||||
separateSounds = false;
|
||||
criticalSoundFile = "/home/${username}/garandos/modules/home/noctalia/settings/notifications/payday-2-new-objective-sound-effect.mp3";
|
||||
normalSoundFile = "/home/${username}/garandos/modules/home/noctalia/settings/notifications/payday-2-new-objective-sound-effect.mp3";
|
||||
lowSoundFile = "/home/${username}/garandos/modules/home/noctalia/settings/notifications/payday-2-new-objective-sound-effect.mp3";
|
||||
excludedApps = "discord,firefox,chrome,chromium,edge";
|
||||
};
|
||||
enableMediaToast = false;
|
||||
};
|
||||
}
|
||||
Binary file not shown.
15
modules/home/noctalia/settings/osd.nix
Normal file
15
modules/home/noctalia/settings/osd.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.osd = lib.mkForce {
|
||||
"enabled" = true;
|
||||
"location" = "right";
|
||||
"autoHideMs" = 2000;
|
||||
"overlayLayer" = true;
|
||||
"backgroundOpacity" = 0;
|
||||
"enabledTypes" = [
|
||||
0
|
||||
1
|
||||
2
|
||||
];
|
||||
"monitors" = [];
|
||||
};
|
||||
}
|
||||
49
modules/home/noctalia/settings/session-menu.nix
Normal file
49
modules/home/noctalia/settings/session-menu.nix
Normal file
@@ -0,0 +1,49 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.sessionMenu = lib.mkForce {
|
||||
enableCountdown = false;
|
||||
countdownDuration = 10000;
|
||||
position = "center";
|
||||
showHeader = true;
|
||||
largeButtonsStyle = true;
|
||||
largeButtonsLayout = "grid";
|
||||
showNumberLabels = true;
|
||||
powerOptions = [
|
||||
{
|
||||
action = "lock";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
action = "suspend";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
action = "hibernate";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
action = "reboot";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
action = "logout";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
action = "shutdown";
|
||||
command = "";
|
||||
countdownEnabled = true;
|
||||
enabled = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
34
modules/home/noctalia/settings/system-monitor.nix
Normal file
34
modules/home/noctalia/settings/system-monitor.nix
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
stylix = config.stylix.base16Scheme;
|
||||
in {
|
||||
programs.noctalia-shell.settings.systemMonitor = lib.mkForce {
|
||||
cpuWarningThreshold = 80;
|
||||
cpuCriticalThreshold = 90;
|
||||
tempWarningThreshold = 80;
|
||||
tempCriticalThreshold = 90;
|
||||
gpuWarningThreshold = 80;
|
||||
gpuCriticalThreshold = 90;
|
||||
memWarningThreshold = 80;
|
||||
memCriticalThreshold = 90;
|
||||
swapWarningThreshold = 80;
|
||||
swapCriticalThreshold = 90;
|
||||
diskWarningThreshold = 80;
|
||||
diskCriticalThreshold = 90;
|
||||
cpuPollingInterval = 3000;
|
||||
tempPollingInterval = 3000;
|
||||
gpuPollingInterval = 3000;
|
||||
enableDgpuMonitoring = false;
|
||||
memPollingInterval = 3000;
|
||||
diskPollingInterval = 30000;
|
||||
networkPollingInterval = 3000;
|
||||
loadAvgPollingInterval = 3000;
|
||||
useCustomColors = true;
|
||||
warningColor = "#${stylix.base03}";
|
||||
criticalColor = "#${stylix.base02}";
|
||||
externalMonitor = "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor";
|
||||
};
|
||||
}
|
||||
6
modules/home/noctalia/settings/templates.nix
Normal file
6
modules/home/noctalia/settings/templates.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.templates = lib.mkForce {
|
||||
activeTemplates = [];
|
||||
enableUserTheming = false;
|
||||
};
|
||||
}
|
||||
17
modules/home/noctalia/settings/ui.nix
Normal file
17
modules/home/noctalia/settings/ui.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
{lib, ...}: {
|
||||
programs.noctalia-shell.settings.ui = lib.mkForce {
|
||||
fontDefault = "Fira Code";
|
||||
fontFixed = "Fira Mono for Powerline";
|
||||
fontDefaultScale = 1;
|
||||
fontFixedScale = 1;
|
||||
tooltipsEnabled = true;
|
||||
panelBackgroundOpacity = 0.76;
|
||||
panelsAttachedToBar = true;
|
||||
settingsPanelMode = "attached";
|
||||
wifiDetailsViewMode = "grid";
|
||||
bluetoothDetailsViewMode = "grid";
|
||||
networkPanelView = "wifi";
|
||||
bluetoothHideUnnamedDevices = false;
|
||||
boxBorderEnabled = false;
|
||||
};
|
||||
}
|
||||
47
modules/home/noctalia/settings/wallpapers.nix
Normal file
47
modules/home/noctalia/settings/wallpapers.nix
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
lib,
|
||||
host,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
inherit (import ../../../../hosts/${host}/variables.nix) stylixImage;
|
||||
in {
|
||||
programs.noctalia-shell.settings.wallpaper = lib.mkForce {
|
||||
enabled = true;
|
||||
overviewEnabled = false;
|
||||
directory = "/home/${username}/Pictures/Wallpapers";
|
||||
monitorDirectories = [];
|
||||
enableMultiMonitorDirectories = false;
|
||||
showHiddenFiles = false;
|
||||
viewMode = "single";
|
||||
setWallpaperOnAllMonitors = true;
|
||||
fillMode = "crop";
|
||||
fillColor = "#000000";
|
||||
useSolidColor = false;
|
||||
solidColor = "#1a1a2e";
|
||||
automationEnabled = false;
|
||||
wallpaperChangeMode = "random";
|
||||
randomIntervalSec = 300;
|
||||
transitionDuration = 1500;
|
||||
transitionType = "random";
|
||||
transitionEdgeSmoothness = 0.05;
|
||||
panelPosition = "follow_bar";
|
||||
hideWallpaperFilenames = false;
|
||||
useWallhaven = false;
|
||||
wallhavenQuery = "";
|
||||
wallhavenSorting = "relevance";
|
||||
wallhavenOrder = "desc";
|
||||
wallhavenCategories = "111";
|
||||
wallhavenPurity = "100";
|
||||
wallhavenRatios = "";
|
||||
wallhavenApiKey = "";
|
||||
wallhavenResolutionMode = "atleast";
|
||||
wallhavenResolutionWidth = "";
|
||||
wallhavenResolutionHeight = "";
|
||||
sortOrder = "name";
|
||||
};
|
||||
|
||||
home.file.".cache/noctalia/wallpapers.json".text = lib.mkForce (builtins.toJSON {
|
||||
defaultWallpaper = ../../../../wallpapers/${stylixImage};
|
||||
});
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{lib, ...}: let
|
||||
overviewSource = ./overview;
|
||||
in {
|
||||
# Quickshell-overview is a Qt6 QML app for Hyprland workspace overview
|
||||
# It shows all workspaces with live window previews, drag-and-drop support
|
||||
# Toggled via: SUPER + TAB (bound in hyprland/binds.nix)
|
||||
# Started via exec-once in hyprland/exec-once.nix
|
||||
|
||||
# Seed the Quickshell overview code into ~/.config/quickshell/overview
|
||||
# Copy (not symlink) so QML module resolution works and users can edit files
|
||||
home.activation.seedOverviewCode = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||
set -eu
|
||||
DEST="$HOME/.config/quickshell/overview"
|
||||
SRC="${overviewSource}"
|
||||
|
||||
if [ ! -d "$DEST" ]; then
|
||||
mkdir -p "$HOME/.config/quickshell"
|
||||
cp -R "$SRC" "$DEST"
|
||||
chmod -R u+rwX "$DEST"
|
||||
fi
|
||||
'';
|
||||
}
|
||||
@@ -1,214 +0,0 @@
|
||||
# Quickshell Overview for Hyprland
|
||||
|
||||
<div align="center">
|
||||
|
||||
A standalone workspace overview module for Hyprland using Quickshell - shows all workspaces with live window previews, drag-and-drop support, and Super+Tab keybind.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📸 Preview
|
||||
|
||||

|
||||
|
||||
https://github.com/user-attachments/assets/79ceb141-6b9e-4956-8e09-aaf72b66550c
|
||||
|
||||
> *Workspace overview showing live window previews with drag-and-drop support*
|
||||
|
||||
---
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- 🖼️ Visual workspace overview showing all workspaces and windows
|
||||
- 🎯 Click windows to focus them
|
||||
- 🖱️ Middle-click windows to close them
|
||||
- 🔄 Drag and drop windows between workspaces
|
||||
- ⌨️ Keyboard navigation (Arrow keys to switch workspaces, Escape/Enter to close)
|
||||
- 💡 Hover tooltips showing window information
|
||||
- 🎨 Material Design 3 theming
|
||||
- ⚡ Smooth animations and transitions
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- **Hyprland** compositor
|
||||
- **Quickshell** ([installation guide](https://quickshell.org/docs/v0.1.0/guide/install-setup/))
|
||||
- **Qt 6** with modules: QtQuick, QtQuick.Controls, Qt5Compat.GraphicalEffects
|
||||
|
||||
### Setup
|
||||
|
||||
1. **Clone this repository** to your Quickshell config directory:
|
||||
```bash
|
||||
git clone https://github.com/Shanu-Kumawat/quickshell-overview ~/.config/quickshell/overview
|
||||
```
|
||||
|
||||
2. **Add keybind** to your Hyprland config (`~/.config/hypr/hyprland.conf`):
|
||||
```conf
|
||||
bind = Super, TAB, exec, qs ipc -c overview call overview toggle
|
||||
```
|
||||
|
||||
3. **Auto-start** the overview (add to Hyprland config):
|
||||
```conf
|
||||
exec-once = qs -c overview
|
||||
```
|
||||
|
||||
4. **Reload Hyprland**:
|
||||
```bash
|
||||
hyprctl reload
|
||||
```
|
||||
|
||||
### Manual Start (if needed)
|
||||
|
||||
```bash
|
||||
qs -c overview &
|
||||
```
|
||||
|
||||
## 🎮 Usage
|
||||
|
||||
| Action | Description |
|
||||
|--------|-------------|
|
||||
| **Super + Tab** | Toggle the overview |
|
||||
| **Left/Right Arrow Keys** | Navigate between workspaces horizontally |
|
||||
| **Up/Down Arrow Keys** | Navigate between workspace rows |
|
||||
| **Escape / Enter** | Close the overview |
|
||||
| **Click workspace** | Switch to that workspace |
|
||||
| **Click window** | Focus that window |
|
||||
| **Middle-click window** | Close that window |
|
||||
| **Drag window** | Move window to different workspace |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
> **⚠️ Want to change the size, position, or number of workspaces?**
|
||||
> Edit `~/.config/quickshell/overview/common/Config.qml` - it's all there!
|
||||
|
||||
### Workspace Grid
|
||||
|
||||
Edit `~/.config/quickshell/overview/common/Config.qml`:
|
||||
|
||||
```qml
|
||||
property QtObject overview: QtObject {
|
||||
property int rows: 2 // Number of workspace rows
|
||||
property int columns: 5 // Number of workspace columns (10 total workspaces)
|
||||
property real scale: 0.16 // Overview scale factor (0.1-0.3, smaller = more compact)
|
||||
property bool enable: true
|
||||
}
|
||||
```
|
||||
|
||||
**Common adjustments:**
|
||||
- **Too small?** Increase `scale` (try 0.20 or 0.25)
|
||||
- **Too big?** Decrease `scale` (try 0.12 or 0.14)
|
||||
- **More workspaces?** Change `rows` and `columns` (e.g., 3 rows × 4 columns = 12 workspaces)
|
||||
|
||||
### Position
|
||||
|
||||
Edit `~/.config/quickshell/overview/modules/overview/Overview.qml` (line ~111):
|
||||
|
||||
```qml
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: 100 // Change this value to move up/down
|
||||
}
|
||||
```
|
||||
|
||||
### Theme & Colors
|
||||
|
||||
Edit `~/.config/quickshell/overview/common/Appearance.qml` to customize:
|
||||
- Colors (m3colors and colors objects)
|
||||
- Font families and sizes
|
||||
- Animation curves and durations
|
||||
- Border radius values
|
||||
|
||||
---
|
||||
|
||||
## 📋 Requirements
|
||||
|
||||
- **Hyprland** compositor (tested on latest versions)
|
||||
- **Quickshell** (Qt6-based shell framework)
|
||||
- **Qt 6** with the following modules:
|
||||
- QtQuick
|
||||
- QtQuick.Controls
|
||||
- QtQuick.Layouts
|
||||
- Qt5Compat.GraphicalEffects
|
||||
- Quickshell.Wayland
|
||||
- Quickshell.Hyprland
|
||||
|
||||
## 🚫 Removed Features (from original illogical-impulse)
|
||||
|
||||
The following features were removed to make it standalone:
|
||||
|
||||
- App search functionality
|
||||
- Emoji picker
|
||||
- Clipboard history integration
|
||||
- Search widget
|
||||
- Integration with the full illogical-impulse shell ecosystem
|
||||
|
||||
## 📁 File Structure
|
||||
|
||||
```
|
||||
~/.config/quickshell/overview/
|
||||
├── shell.qml # Main entry point
|
||||
├── README.md # This file
|
||||
├── hyprland-config.conf # Configuration reference
|
||||
├── common/
|
||||
│ ├── Appearance.qml # Theme and styling
|
||||
│ ├── Config.qml # Configuration options
|
||||
│ ├── functions/
|
||||
│ │ └── ColorUtils.qml # Color manipulation utilities
|
||||
│ └── widgets/
|
||||
│ ├── StyledText.qml # Styled text component
|
||||
│ ├── StyledRectangularShadow.qml
|
||||
│ ├── StyledToolTip.qml
|
||||
│ └── StyledToolTipContent.qml
|
||||
├── services/
|
||||
│ ├── GlobalStates.qml # Global state management
|
||||
│ └── HyprlandData.qml # Hyprland data provider
|
||||
└── modules/
|
||||
└── overview/
|
||||
├── Overview.qml # Main overview component
|
||||
├── OverviewWidget.qml # Workspace grid widget
|
||||
└── OverviewWindow.qml # Individual window preview
|
||||
```
|
||||
|
||||
## 🎯 IPC Commands
|
||||
|
||||
```bash
|
||||
# Toggle overview
|
||||
qs ipc -c overview call overview toggle
|
||||
|
||||
# Open overview
|
||||
qs ipc -c overview call overview open
|
||||
|
||||
# Close overview
|
||||
qs ipc -c overview call overview close
|
||||
```
|
||||
|
||||
## 🐛 Known Issues
|
||||
|
||||
- Window icons may fallback to generic icon if app class name doesn't match icon theme
|
||||
- Potential crashes during rapid window state changes due to Wayland screencopy buffer management
|
||||
|
||||
## Credits
|
||||
|
||||
Extracted from the overview feature in [illogical-impulse](https://github.com/end-4/dots-hyprland) by [end-4](https://github.com/end-4).
|
||||
|
||||
Adapted as a standalone component for Hyprland + Quickshell users who want just the overview functionality.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**Note:** Maintenance will be limited due to time constraints, but **PRs and code improvements are welcome!** Feel free to contribute or fork for your own needs.
|
||||
|
||||
Made with ❤️ for the Hyprland community
|
||||
|
||||
</div>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 MiB |
@@ -1,148 +0,0 @@
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import "functions"
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
property QtObject m3colors
|
||||
property QtObject animation
|
||||
property QtObject animationCurves
|
||||
property QtObject colors
|
||||
property QtObject rounding
|
||||
property QtObject font
|
||||
property QtObject sizes
|
||||
|
||||
m3colors: QtObject {
|
||||
property bool darkmode: true
|
||||
property color m3primary: "#E5B6F2"
|
||||
property color m3onPrimary: "#452152"
|
||||
property color m3primaryContainer: "#5D386A"
|
||||
property color m3onPrimaryContainer: "#F9D8FF"
|
||||
property color m3secondary: "#D5C0D7"
|
||||
property color m3onSecondary: "#392C3D"
|
||||
property color m3secondaryContainer: "#534457"
|
||||
property color m3onSecondaryContainer: "#F2DCF3"
|
||||
property color m3background: "#161217"
|
||||
property color m3onBackground: "#EAE0E7"
|
||||
property color m3surface: "#161217"
|
||||
property color m3surfaceContainerLow: "#1F1A1F"
|
||||
property color m3surfaceContainer: "#231E23"
|
||||
property color m3surfaceContainerHigh: "#2D282E"
|
||||
property color m3surfaceContainerHighest: "#383339"
|
||||
property color m3onSurface: "#EAE0E7"
|
||||
property color m3surfaceVariant: "#4C444D"
|
||||
property color m3onSurfaceVariant: "#CFC3CD"
|
||||
property color m3inverseSurface: "#EAE0E7"
|
||||
property color m3inverseOnSurface: "#342F34"
|
||||
property color m3outline: "#988E97"
|
||||
property color m3outlineVariant: "#4C444D"
|
||||
property color m3shadow: "#000000"
|
||||
}
|
||||
|
||||
colors: QtObject {
|
||||
property color colSubtext: m3colors.m3outline
|
||||
property color colLayer0: m3colors.m3background
|
||||
property color colOnLayer0: m3colors.m3onBackground
|
||||
property color colLayer0Border: ColorUtils.mix(root.m3colors.m3outlineVariant, colLayer0, 0.4)
|
||||
property color colLayer1: m3colors.m3surfaceContainerLow
|
||||
property color colOnLayer1: m3colors.m3onSurfaceVariant
|
||||
property color colOnLayer1Inactive: ColorUtils.mix(colOnLayer1, colLayer1, 0.45)
|
||||
property color colLayer1Hover: ColorUtils.mix(colLayer1, colOnLayer1, 0.92)
|
||||
property color colLayer1Active: ColorUtils.mix(colLayer1, colOnLayer1, 0.85)
|
||||
property color colLayer2: m3colors.m3surfaceContainer
|
||||
property color colOnLayer2: m3colors.m3onSurface
|
||||
property color colLayer2Hover: ColorUtils.mix(colLayer2, colOnLayer2, 0.90)
|
||||
property color colLayer2Active: ColorUtils.mix(colLayer2, colOnLayer2, 0.80)
|
||||
property color colPrimary: m3colors.m3primary
|
||||
property color colOnPrimary: m3colors.m3onPrimary
|
||||
property color colSecondary: m3colors.m3secondary
|
||||
property color colSecondaryContainer: m3colors.m3secondaryContainer
|
||||
property color colOnSecondaryContainer: m3colors.m3onSecondaryContainer
|
||||
property color colTooltip: m3colors.m3inverseSurface
|
||||
property color colOnTooltip: m3colors.m3inverseOnSurface
|
||||
property color colShadow: ColorUtils.transparentize(m3colors.m3shadow, 0.7)
|
||||
property color colOutline: m3colors.m3outline
|
||||
}
|
||||
|
||||
rounding: QtObject {
|
||||
property int unsharpen: 2
|
||||
property int verysmall: 8
|
||||
property int small: 12
|
||||
property int normal: 17
|
||||
property int large: 23
|
||||
property int full: 9999
|
||||
property int screenRounding: large
|
||||
property int windowRounding: 18
|
||||
}
|
||||
|
||||
font: QtObject {
|
||||
property QtObject family: QtObject {
|
||||
property string main: "sans-serif"
|
||||
property string title: "sans-serif"
|
||||
property string expressive: "sans-serif"
|
||||
}
|
||||
property QtObject pixelSize: QtObject {
|
||||
property int smaller: 12
|
||||
property int small: 15
|
||||
property int normal: 16
|
||||
property int larger: 19
|
||||
property int huge: 22
|
||||
}
|
||||
}
|
||||
|
||||
animationCurves: QtObject {
|
||||
readonly property list<real> expressiveDefaultSpatial: [0.38, 1.21, 0.22, 1.00, 1, 1]
|
||||
readonly property list<real> expressiveEffects: [0.34, 0.80, 0.34, 1.00, 1, 1]
|
||||
readonly property list<real> emphasizedDecel: [0.05, 0.7, 0.1, 1, 1, 1]
|
||||
readonly property real expressiveDefaultSpatialDuration: 500
|
||||
readonly property real expressiveEffectsDuration: 200
|
||||
}
|
||||
|
||||
animation: QtObject {
|
||||
property QtObject elementMove: QtObject {
|
||||
property int duration: animationCurves.expressiveDefaultSpatialDuration
|
||||
property int type: Easing.BezierSpline
|
||||
property list<real> bezierCurve: animationCurves.expressiveDefaultSpatial
|
||||
property Component numberAnimation: Component {
|
||||
NumberAnimation {
|
||||
duration: root.animation.elementMove.duration
|
||||
easing.type: root.animation.elementMove.type
|
||||
easing.bezierCurve: root.animation.elementMove.bezierCurve
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property QtObject elementMoveEnter: QtObject {
|
||||
property int duration: 400
|
||||
property int type: Easing.BezierSpline
|
||||
property list<real> bezierCurve: animationCurves.emphasizedDecel
|
||||
property Component numberAnimation: Component {
|
||||
NumberAnimation {
|
||||
duration: root.animation.elementMoveEnter.duration
|
||||
easing.type: root.animation.elementMoveEnter.type
|
||||
easing.bezierCurve: root.animation.elementMoveEnter.bezierCurve
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property QtObject elementMoveFast: QtObject {
|
||||
property int duration: animationCurves.expressiveEffectsDuration
|
||||
property int type: Easing.BezierSpline
|
||||
property list<real> bezierCurve: animationCurves.expressiveEffects
|
||||
property Component numberAnimation: Component {
|
||||
NumberAnimation {
|
||||
duration: root.animation.elementMoveFast.duration
|
||||
easing.type: root.animation.elementMoveFast.type
|
||||
easing.bezierCurve: root.animation.elementMoveFast.bezierCurve
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sizes: QtObject {
|
||||
property real elevationMargin: 10
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property QtObject options: QtObject {
|
||||
property QtObject overview: QtObject {
|
||||
property int rows: 2
|
||||
property int columns: 5
|
||||
property real scale: 0.16
|
||||
property bool enable: true
|
||||
}
|
||||
|
||||
property QtObject hacks: QtObject {
|
||||
property int arbitraryRaceConditionDelay: 150
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
pragma Singleton
|
||||
import Quickshell
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
function colorWithHueOf(color1, color2) {
|
||||
var c1 = Qt.color(color1);
|
||||
var c2 = Qt.color(color2);
|
||||
var hue = c2.hsvHue;
|
||||
var sat = c1.hsvSaturation;
|
||||
var val = c1.hsvValue;
|
||||
var alpha = c1.a;
|
||||
return Qt.hsva(hue, sat, val, alpha);
|
||||
}
|
||||
|
||||
function colorWithSaturationOf(color1, color2) {
|
||||
var c1 = Qt.color(color1);
|
||||
var c2 = Qt.color(color2);
|
||||
var hue = c1.hsvHue;
|
||||
var sat = c2.hsvSaturation;
|
||||
var val = c1.hsvValue;
|
||||
var alpha = c1.a;
|
||||
return Qt.hsva(hue, sat, val, alpha);
|
||||
}
|
||||
|
||||
function colorWithLightness(color, lightness) {
|
||||
var c = Qt.color(color);
|
||||
return Qt.hsla(c.hslHue, c.hslSaturation, lightness, c.a);
|
||||
}
|
||||
|
||||
function colorWithLightnessOf(color1, color2) {
|
||||
var c2 = Qt.color(color2);
|
||||
return colorWithLightness(color1, c2.hslLightness);
|
||||
}
|
||||
|
||||
function adaptToAccent(color1, color2) {
|
||||
var c1 = Qt.color(color1);
|
||||
var c2 = Qt.color(color2);
|
||||
var hue = c2.hslHue;
|
||||
var sat = c2.hslSaturation;
|
||||
var light = c1.hslLightness;
|
||||
var alpha = c1.a;
|
||||
return Qt.hsla(hue, sat, light, alpha);
|
||||
}
|
||||
|
||||
function mix(color1, color2, percentage = 0.5) {
|
||||
var c1 = Qt.color(color1);
|
||||
var c2 = Qt.color(color2);
|
||||
return Qt.rgba(
|
||||
percentage * c1.r + (1 - percentage) * c2.r,
|
||||
percentage * c1.g + (1 - percentage) * c2.g,
|
||||
percentage * c1.b + (1 - percentage) * c2.b,
|
||||
percentage * c1.a + (1 - percentage) * c2.a
|
||||
);
|
||||
}
|
||||
|
||||
function transparentize(color, percentage = 1) {
|
||||
var c = Qt.color(color);
|
||||
return Qt.rgba(c.r, c.g, c.b, c.a * (1 - percentage));
|
||||
}
|
||||
|
||||
function applyAlpha(color, alpha) {
|
||||
var c = Qt.color(color);
|
||||
var a = Math.max(0, Math.min(1, alpha));
|
||||
return Qt.rgba(c.r, c.g, c.b, a);
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
singleton ColorUtils 1.0 ColorUtils.qml
|
||||
@@ -1,7 +0,0 @@
|
||||
singleton Appearance 1.0 Appearance.qml
|
||||
singleton Config 1.0 Config.qml
|
||||
singleton ColorUtils 1.0 functions/ColorUtils.qml
|
||||
StyledText 1.0 widgets/StyledText.qml
|
||||
StyledRectangularShadow 1.0 widgets/StyledRectangularShadow.qml
|
||||
StyledToolTip 1.0 widgets/StyledToolTip.qml
|
||||
StyledToolTipContent 1.0 widgets/StyledToolTipContent.qml
|
||||
@@ -1,14 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
import ".."
|
||||
|
||||
RectangularShadow {
|
||||
required property var target
|
||||
anchors.fill: target
|
||||
radius: 20
|
||||
blur: 0.9 * Appearance.sizes.elevationMargin
|
||||
offset: Qt.vector2d(0.0, 1.0)
|
||||
spread: 1
|
||||
color: Appearance.colors.colShadow
|
||||
cached: true
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import QtQuick
|
||||
import ".."
|
||||
|
||||
Text {
|
||||
id: root
|
||||
property bool animateChange: false
|
||||
|
||||
renderType: Text.NativeRendering
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font {
|
||||
hintingPreference: Font.PreferFullHinting
|
||||
family: Appearance?.font.family.main ?? "sans-serif"
|
||||
pixelSize: Appearance?.font.pixelSize.small ?? 15
|
||||
}
|
||||
color: Appearance?.m3colors.m3onBackground ?? "white"
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import "."
|
||||
|
||||
ToolTip {
|
||||
id: root
|
||||
property bool extraVisibleCondition: true
|
||||
property bool alternativeVisibleCondition: false
|
||||
readonly property bool internalVisibleCondition: (extraVisibleCondition && (parent.hovered === undefined || parent?.hovered)) || alternativeVisibleCondition
|
||||
verticalPadding: 5
|
||||
horizontalPadding: 10
|
||||
background: null
|
||||
|
||||
visible: internalVisibleCondition
|
||||
|
||||
contentItem: StyledToolTipContent {
|
||||
id: contentItem
|
||||
text: root.text
|
||||
shown: root.internalVisibleCondition
|
||||
horizontalPadding: root.horizontalPadding
|
||||
verticalPadding: root.verticalPadding
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
import QtQuick
|
||||
import "."
|
||||
import "../"
|
||||
|
||||
Item {
|
||||
id: root
|
||||
required property string text
|
||||
property bool shown: false
|
||||
property real horizontalPadding: 10
|
||||
property real verticalPadding: 5
|
||||
implicitWidth: tooltipTextObject.implicitWidth + 2 * root.horizontalPadding
|
||||
implicitHeight: tooltipTextObject.implicitHeight + 2 * root.verticalPadding
|
||||
|
||||
property bool isVisible: backgroundRectangle.implicitHeight > 0
|
||||
|
||||
Rectangle {
|
||||
id: backgroundRectangle
|
||||
anchors {
|
||||
bottom: root.bottom
|
||||
horizontalCenter: root.horizontalCenter
|
||||
}
|
||||
color: Appearance?.colors.colTooltip ?? "#3C4043"
|
||||
radius: Appearance?.rounding.verysmall ?? 7
|
||||
opacity: shown ? 1 : 0
|
||||
implicitWidth: shown ? (tooltipTextObject.implicitWidth + 2 * root.horizontalPadding) : 0
|
||||
implicitHeight: shown ? (tooltipTextObject.implicitHeight + 2 * root.verticalPadding) : 0
|
||||
clip: true
|
||||
|
||||
Behavior on implicitWidth {
|
||||
animation: Appearance?.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on implicitHeight {
|
||||
animation: Appearance?.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on opacity {
|
||||
animation: Appearance?.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||
}
|
||||
|
||||
StyledText {
|
||||
id: tooltipTextObject
|
||||
anchors.centerIn: parent
|
||||
text: root.text
|
||||
font.pixelSize: Appearance?.font.pixelSize.smaller ?? 14
|
||||
font.hintingPreference: Font.PreferNoHinting
|
||||
color: Appearance?.colors.colOnTooltip ?? "#FFFFFF"
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
StyledText 1.0 StyledText.qml
|
||||
StyledRectangularShadow 1.0 StyledRectangularShadow.qml
|
||||
StyledToolTip 1.0 StyledToolTip.qml
|
||||
StyledToolTipContent 1.0 StyledToolTipContent.qml
|
||||
@@ -1,147 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import "../../common"
|
||||
import "../../services"
|
||||
import "."
|
||||
|
||||
Scope {
|
||||
id: overviewScope
|
||||
Variants {
|
||||
id: overviewVariants
|
||||
model: Quickshell.screens
|
||||
PanelWindow {
|
||||
id: root
|
||||
required property var modelData
|
||||
readonly property HyprlandMonitor monitor: Hyprland.monitorFor(root.screen)
|
||||
property bool monitorIsFocused: (Hyprland.focusedMonitor?.id == monitor?.id)
|
||||
screen: modelData
|
||||
visible: GlobalStates.overviewOpen
|
||||
|
||||
WlrLayershell.namespace: "quickshell:overview"
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
color: "transparent"
|
||||
|
||||
mask: Region {
|
||||
item: GlobalStates.overviewOpen ? keyHandler : null
|
||||
}
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
bottom: true
|
||||
left: !(Config?.options.overview.enable ?? true)
|
||||
right: !(Config?.options.overview.enable ?? true)
|
||||
}
|
||||
|
||||
HyprlandFocusGrab {
|
||||
id: grab
|
||||
windows: [root]
|
||||
property bool canBeActive: root.monitorIsFocused
|
||||
active: false
|
||||
onCleared: () => {
|
||||
if (!active)
|
||||
GlobalStates.overviewOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: GlobalStates
|
||||
function onOverviewOpenChanged() {
|
||||
if (GlobalStates.overviewOpen) {
|
||||
delayedGrabTimer.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: delayedGrabTimer
|
||||
interval: Config.options.hacks.arbitraryRaceConditionDelay
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
if (!grab.canBeActive)
|
||||
return;
|
||||
grab.active = GlobalStates.overviewOpen;
|
||||
}
|
||||
}
|
||||
|
||||
implicitWidth: columnLayout.implicitWidth
|
||||
implicitHeight: columnLayout.implicitHeight
|
||||
|
||||
Item {
|
||||
id: keyHandler
|
||||
anchors.fill: parent
|
||||
visible: GlobalStates.overviewOpen
|
||||
focus: GlobalStates.overviewOpen
|
||||
|
||||
Keys.onPressed: event => {
|
||||
if (event.key === Qt.Key_Escape || event.key === Qt.Key_Return) {
|
||||
GlobalStates.overviewOpen = false;
|
||||
event.accepted = true;
|
||||
} else if (event.key === Qt.Key_Left || event.key === Qt.Key_Right || event.key === Qt.Key_Up || event.key === Qt.Key_Down) {
|
||||
const workspacesPerGroup = Config.options.overview.rows * Config.options.overview.columns;
|
||||
const currentId = Hyprland.focusedMonitor?.activeWorkspace?.id ?? 1;
|
||||
const currentGroup = Math.floor((currentId - 1) / workspacesPerGroup);
|
||||
const minWorkspaceId = currentGroup * workspacesPerGroup + 1;
|
||||
const maxWorkspaceId = minWorkspaceId + workspacesPerGroup - 1;
|
||||
|
||||
let targetId;
|
||||
if (event.key === Qt.Key_Left) {
|
||||
targetId = currentId - 1;
|
||||
if (targetId < minWorkspaceId) targetId = maxWorkspaceId;
|
||||
} else if (event.key === Qt.Key_Right) {
|
||||
targetId = currentId + 1;
|
||||
if (targetId > maxWorkspaceId) targetId = minWorkspaceId;
|
||||
} else if (event.key === Qt.Key_Up) {
|
||||
targetId = currentId - Config.options.overview.columns;
|
||||
if (targetId < minWorkspaceId) targetId += workspacesPerGroup;
|
||||
} else {
|
||||
targetId = currentId + Config.options.overview.columns;
|
||||
if (targetId > maxWorkspaceId) targetId -= workspacesPerGroup;
|
||||
}
|
||||
|
||||
Hyprland.dispatch("workspace " + targetId);
|
||||
event.accepted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: columnLayout
|
||||
visible: GlobalStates.overviewOpen
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: parent.top
|
||||
topMargin: 100
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: overviewLoader
|
||||
active: GlobalStates.overviewOpen && (Config?.options.overview.enable ?? true)
|
||||
sourceComponent: OverviewWidget {
|
||||
panelWindow: root
|
||||
visible: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IpcHandler {
|
||||
target: "overview"
|
||||
|
||||
function toggle() {
|
||||
GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
|
||||
}
|
||||
function close() {
|
||||
GlobalStates.overviewOpen = false;
|
||||
}
|
||||
function open() {
|
||||
GlobalStates.overviewOpen = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,303 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import "../../common"
|
||||
import "../../common/functions"
|
||||
import "../../common/widgets"
|
||||
import "../../services"
|
||||
import "."
|
||||
|
||||
Item {
|
||||
id: root
|
||||
required property var panelWindow
|
||||
readonly property HyprlandMonitor monitor: Hyprland.monitorFor(panelWindow.screen)
|
||||
readonly property var toplevels: ToplevelManager.toplevels
|
||||
readonly property int workspacesShown: Config.options.overview.rows * Config.options.overview.columns
|
||||
readonly property int workspaceGroup: Math.floor((monitor.activeWorkspace?.id - 1) / workspacesShown)
|
||||
property bool monitorIsFocused: (Hyprland.focusedMonitor?.name == monitor.name)
|
||||
property var windows: HyprlandData.windowList
|
||||
property var windowByAddress: HyprlandData.windowByAddress
|
||||
property var windowAddresses: HyprlandData.addresses
|
||||
property var monitorData: HyprlandData.monitors.find(m => m.id === root.monitor?.id)
|
||||
property real scale: Config.options.overview.scale
|
||||
property color activeBorderColor: Appearance.colors.colSecondary
|
||||
|
||||
property real workspaceImplicitWidth: (monitorData?.transform % 2 === 1) ?
|
||||
((monitor.height / monitor.scale - (monitorData?.reserved?.[0] ?? 0) - (monitorData?.reserved?.[2] ?? 0)) * root.scale) :
|
||||
((monitor.width / monitor.scale - (monitorData?.reserved?.[0] ?? 0) - (monitorData?.reserved?.[2] ?? 0)) * root.scale)
|
||||
property real workspaceImplicitHeight: (monitorData?.transform % 2 === 1) ?
|
||||
((monitor.width / monitor.scale - (monitorData?.reserved?.[1] ?? 0) - (monitorData?.reserved?.[3] ?? 0)) * root.scale) :
|
||||
((monitor.height / monitor.scale - (monitorData?.reserved?.[1] ?? 0) - (monitorData?.reserved?.[3] ?? 0)) * root.scale)
|
||||
|
||||
property real workspaceNumberMargin: 80
|
||||
property real workspaceNumberSize: 250 * monitor.scale
|
||||
property int workspaceZ: 0
|
||||
property int windowZ: 1
|
||||
property int windowDraggingZ: 99999
|
||||
property real workspaceSpacing: 5
|
||||
|
||||
property int draggingFromWorkspace: -1
|
||||
property int draggingTargetWorkspace: -1
|
||||
|
||||
implicitWidth: overviewBackground.implicitWidth + Appearance.sizes.elevationMargin * 2
|
||||
implicitHeight: overviewBackground.implicitHeight + Appearance.sizes.elevationMargin * 2
|
||||
|
||||
property Component windowComponent: OverviewWindow {}
|
||||
property list<OverviewWindow> windowWidgets: []
|
||||
|
||||
StyledRectangularShadow {
|
||||
target: overviewBackground
|
||||
}
|
||||
Rectangle { // Background
|
||||
id: overviewBackground
|
||||
property real padding: 10
|
||||
anchors.fill: parent
|
||||
anchors.margins: Appearance.sizes.elevationMargin
|
||||
|
||||
implicitWidth: workspaceColumnLayout.implicitWidth + padding * 2
|
||||
implicitHeight: workspaceColumnLayout.implicitHeight + padding * 2
|
||||
radius: Appearance.rounding.screenRounding * root.scale + padding
|
||||
color: Appearance.colors.colLayer0
|
||||
border.width: 1
|
||||
border.color: Appearance.colors.colLayer0Border
|
||||
|
||||
ColumnLayout { // Workspaces
|
||||
id: workspaceColumnLayout
|
||||
|
||||
z: root.workspaceZ
|
||||
anchors.centerIn: parent
|
||||
spacing: workspaceSpacing
|
||||
Repeater {
|
||||
model: Config.options.overview.rows
|
||||
delegate: RowLayout {
|
||||
id: row
|
||||
property int rowIndex: index
|
||||
spacing: workspaceSpacing
|
||||
|
||||
Repeater { // Workspace repeater
|
||||
model: Config.options.overview.columns
|
||||
Rectangle { // Workspace
|
||||
id: workspace
|
||||
property int colIndex: index
|
||||
property int workspaceValue: root.workspaceGroup * workspacesShown + rowIndex * Config.options.overview.columns + colIndex + 1
|
||||
property color defaultWorkspaceColor: Appearance.colors.colLayer1
|
||||
property color hoveredWorkspaceColor: ColorUtils.mix(defaultWorkspaceColor, Appearance.colors.colLayer1Hover, 0.1)
|
||||
property color hoveredBorderColor: Appearance.colors.colLayer2Hover
|
||||
property bool hoveredWhileDragging: false
|
||||
|
||||
implicitWidth: root.workspaceImplicitWidth
|
||||
implicitHeight: root.workspaceImplicitHeight
|
||||
color: hoveredWhileDragging ? hoveredWorkspaceColor : defaultWorkspaceColor
|
||||
radius: Appearance.rounding.screenRounding * root.scale
|
||||
border.width: 2
|
||||
border.color: hoveredWhileDragging ? hoveredBorderColor : "transparent"
|
||||
|
||||
StyledText {
|
||||
anchors.centerIn: parent
|
||||
text: workspaceValue
|
||||
font {
|
||||
pixelSize: root.workspaceNumberSize * root.scale
|
||||
weight: Font.DemiBold
|
||||
family: Appearance.font.family.expressive
|
||||
}
|
||||
color: ColorUtils.transparentize(Appearance.colors.colOnLayer1, 0.8)
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: workspaceArea
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.LeftButton
|
||||
onClicked: {
|
||||
if (root.draggingTargetWorkspace === -1) {
|
||||
GlobalStates.overviewOpen = false
|
||||
Hyprland.dispatch(`workspace ${workspaceValue}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DropArea {
|
||||
anchors.fill: parent
|
||||
onEntered: {
|
||||
root.draggingTargetWorkspace = workspaceValue
|
||||
if (root.draggingFromWorkspace == root.draggingTargetWorkspace) return;
|
||||
hoveredWhileDragging = true
|
||||
}
|
||||
onExited: {
|
||||
hoveredWhileDragging = false
|
||||
if (root.draggingTargetWorkspace == workspaceValue) root.draggingTargetWorkspace = -1
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item { // Windows & focused workspace indicator
|
||||
id: windowSpace
|
||||
anchors.centerIn: parent
|
||||
implicitWidth: workspaceColumnLayout.implicitWidth
|
||||
implicitHeight: workspaceColumnLayout.implicitHeight
|
||||
|
||||
Repeater { // Window repeater
|
||||
model: ScriptModel {
|
||||
values: {
|
||||
return ToplevelManager.toplevels.values.filter((toplevel) => {
|
||||
const address = `0x${toplevel.HyprlandToplevel.address}`
|
||||
var win = windowByAddress[address]
|
||||
const inWorkspaceGroup = (root.workspaceGroup * root.workspacesShown < win?.workspace?.id && win?.workspace?.id <= (root.workspaceGroup + 1) * root.workspacesShown)
|
||||
return inWorkspaceGroup;
|
||||
}).sort((a, b) => {
|
||||
// Proper stacking order based on Hyprland's window properties
|
||||
const addrA = `0x${a.HyprlandToplevel.address}`
|
||||
const addrB = `0x${b.HyprlandToplevel.address}`
|
||||
const winA = windowByAddress[addrA]
|
||||
const winB = windowByAddress[addrB]
|
||||
|
||||
// 1. Pinned windows are always on top
|
||||
if (winA?.pinned !== winB?.pinned) {
|
||||
return winA?.pinned ? 1 : -1
|
||||
}
|
||||
|
||||
// 2. Floating windows above tiled windows
|
||||
if (winA?.floating !== winB?.floating) {
|
||||
return winA?.floating ? 1 : -1
|
||||
}
|
||||
|
||||
// 3. Within same category, sort by focus history
|
||||
// Lower focusHistoryID = more recently focused = higher in stack
|
||||
return (winB?.focusHistoryID ?? 0) - (winA?.focusHistoryID ?? 0)
|
||||
})
|
||||
}
|
||||
}
|
||||
delegate: OverviewWindow {
|
||||
id: window
|
||||
required property var modelData
|
||||
required property int index
|
||||
property int monitorId: windowData?.monitor
|
||||
property var monitor: HyprlandData.monitors.find(m => m.id === monitorId)
|
||||
property var address: `0x${modelData.HyprlandToplevel.address}`
|
||||
windowData: windowByAddress[address]
|
||||
toplevel: modelData
|
||||
monitorData: monitor
|
||||
|
||||
// Calculate scale relative to window's source monitor
|
||||
property real sourceMonitorWidth: (monitor?.transform % 2 === 1) ?
|
||||
(monitor?.height ?? 1920) / (monitor?.scale ?? 1) - (monitor?.reserved?.[0] ?? 0) - (monitor?.reserved?.[2] ?? 0) :
|
||||
(monitor?.width ?? 1920) / (monitor?.scale ?? 1) - (monitor?.reserved?.[0] ?? 0) - (monitor?.reserved?.[2] ?? 0)
|
||||
property real sourceMonitorHeight: (monitor?.transform % 2 === 1) ?
|
||||
(monitor?.width ?? 1080) / (monitor?.scale ?? 1) - (monitor?.reserved?.[1] ?? 0) - (monitor?.reserved?.[3] ?? 0) :
|
||||
(monitor?.height ?? 1080) / (monitor?.scale ?? 1) - (monitor?.reserved?.[1] ?? 0) - (monitor?.reserved?.[3] ?? 0)
|
||||
|
||||
// Scale windows to fit the workspace size, accounting for different monitor sizes
|
||||
scale: Math.min(
|
||||
root.workspaceImplicitWidth / sourceMonitorWidth,
|
||||
root.workspaceImplicitHeight / sourceMonitorHeight
|
||||
)
|
||||
|
||||
availableWorkspaceWidth: root.workspaceImplicitWidth
|
||||
availableWorkspaceHeight: root.workspaceImplicitHeight
|
||||
widgetMonitorId: root.monitor.id
|
||||
|
||||
property bool atInitPosition: (initX == x && initY == y)
|
||||
|
||||
property int workspaceColIndex: (windowData?.workspace.id - 1) % Config.options.overview.columns
|
||||
property int workspaceRowIndex: Math.floor((windowData?.workspace.id - 1) % root.workspacesShown / Config.options.overview.columns)
|
||||
xOffset: (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex
|
||||
yOffset: (root.workspaceImplicitHeight + workspaceSpacing) * workspaceRowIndex
|
||||
|
||||
Timer {
|
||||
id: updateWindowPosition
|
||||
interval: Config.options.hacks.arbitraryRaceConditionDelay
|
||||
repeat: false
|
||||
running: false
|
||||
onTriggered: {
|
||||
window.x = Math.round(Math.max((windowData?.at[0] - (monitor?.x ?? 0) - (monitorData?.reserved?.[0] ?? 0)) * root.scale, 0) + xOffset)
|
||||
window.y = Math.round(Math.max((windowData?.at[1] - (monitor?.y ?? 0) - (monitorData?.reserved?.[1] ?? 0)) * root.scale, 0) + yOffset)
|
||||
}
|
||||
}
|
||||
|
||||
z: atInitPosition ? (root.windowZ + index) : root.windowDraggingZ
|
||||
Drag.hotSpot.x: targetWindowWidth / 2
|
||||
Drag.hotSpot.y: targetWindowHeight / 2
|
||||
MouseArea {
|
||||
id: dragArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: hovered = true
|
||||
onExited: hovered = false
|
||||
acceptedButtons: Qt.LeftButton | Qt.MiddleButton
|
||||
drag.target: parent
|
||||
onPressed: (mouse) => {
|
||||
root.draggingFromWorkspace = windowData?.workspace.id
|
||||
window.pressed = true
|
||||
window.Drag.active = true
|
||||
window.Drag.source = window
|
||||
window.Drag.hotSpot.x = mouse.x
|
||||
window.Drag.hotSpot.y = mouse.y
|
||||
}
|
||||
onReleased: {
|
||||
const targetWorkspace = root.draggingTargetWorkspace
|
||||
window.pressed = false
|
||||
window.Drag.active = false
|
||||
root.draggingFromWorkspace = -1
|
||||
if (targetWorkspace !== -1 && targetWorkspace !== windowData?.workspace.id) {
|
||||
Hyprland.dispatch(`movetoworkspacesilent ${targetWorkspace}, address:${window.windowData?.address}`)
|
||||
updateWindowPosition.restart()
|
||||
}
|
||||
else {
|
||||
window.x = window.initX
|
||||
window.y = window.initY
|
||||
}
|
||||
}
|
||||
onClicked: (event) => {
|
||||
if (!windowData) return;
|
||||
|
||||
if (event.button === Qt.LeftButton) {
|
||||
GlobalStates.overviewOpen = false
|
||||
Hyprland.dispatch(`focuswindow address:${windowData.address}`)
|
||||
event.accepted = true
|
||||
} else if (event.button === Qt.MiddleButton) {
|
||||
Hyprland.dispatch(`closewindow address:${windowData.address}`)
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
StyledToolTip {
|
||||
extraVisibleCondition: false
|
||||
alternativeVisibleCondition: dragArea.containsMouse && !window.Drag.active
|
||||
text: `${windowData?.title ?? "Unknown"}\n[${windowData?.class ?? "unknown"}] ${windowData?.xwayland ? "[XWayland] " : ""}`
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { // Focused workspace indicator
|
||||
id: focusedWorkspaceIndicator
|
||||
property int activeWorkspaceInGroup: monitor.activeWorkspace?.id - (root.workspaceGroup * root.workspacesShown)
|
||||
property int activeWorkspaceRowIndex: Math.floor((activeWorkspaceInGroup - 1) / Config.options.overview.columns)
|
||||
property int activeWorkspaceColIndex: (activeWorkspaceInGroup - 1) % Config.options.overview.columns
|
||||
x: (root.workspaceImplicitWidth + workspaceSpacing) * activeWorkspaceColIndex
|
||||
y: (root.workspaceImplicitHeight + workspaceSpacing) * activeWorkspaceRowIndex
|
||||
z: root.windowZ
|
||||
width: root.workspaceImplicitWidth
|
||||
height: root.workspaceImplicitHeight
|
||||
color: "transparent"
|
||||
radius: Appearance.rounding.screenRounding * root.scale
|
||||
border.width: 2
|
||||
border.color: root.activeBorderColor
|
||||
Behavior on x {
|
||||
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on y {
|
||||
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import "../../common"
|
||||
import "../../common/functions"
|
||||
import "../../services"
|
||||
|
||||
Item { // Window
|
||||
id: root
|
||||
property var toplevel
|
||||
property var windowData
|
||||
property var monitorData
|
||||
property var scale
|
||||
property var availableWorkspaceWidth
|
||||
property var availableWorkspaceHeight
|
||||
property bool restrictToWorkspace: true
|
||||
property real initX: Math.max(((windowData?.at[0] ?? 0) - (monitorData?.x ?? 0) - (monitorData?.reserved?.[0] ?? 0)) * root.scale, 0) + xOffset
|
||||
property real initY: Math.max(((windowData?.at[1] ?? 0) - (monitorData?.y ?? 0) - (monitorData?.reserved?.[1] ?? 0)) * root.scale, 0) + yOffset
|
||||
property real xOffset: 0
|
||||
property real yOffset: 0
|
||||
property int widgetMonitorId: 0
|
||||
|
||||
property var targetWindowWidth: (windowData?.size[0] ?? 100) * scale
|
||||
property var targetWindowHeight: (windowData?.size[1] ?? 100) * scale
|
||||
property bool hovered: false
|
||||
property bool pressed: false
|
||||
|
||||
property var iconToWindowRatio: 0.25
|
||||
property var xwaylandIndicatorToIconRatio: 0.35
|
||||
property var iconToWindowRatioCompact: 0.45
|
||||
property var entry: DesktopEntries.heuristicLookup(windowData?.class)
|
||||
property var iconPath: Quickshell.iconPath(entry?.icon ?? windowData?.class ?? "application-x-executable", "image-missing")
|
||||
property bool compactMode: Appearance.font.pixelSize.smaller * 4 > targetWindowHeight || Appearance.font.pixelSize.smaller * 4 > targetWindowWidth
|
||||
|
||||
property bool indicateXWayland: windowData?.xwayland ?? false
|
||||
|
||||
x: initX
|
||||
y: initY
|
||||
width: Math.min((windowData?.size[0] ?? 100) * root.scale, availableWorkspaceWidth)
|
||||
height: Math.min((windowData?.size[1] ?? 100) * root.scale, availableWorkspaceHeight)
|
||||
opacity: (windowData?.monitor ?? -1) == widgetMonitorId ? 1 : 0.4
|
||||
|
||||
layer.enabled: true
|
||||
layer.effect: OpacityMask {
|
||||
maskSource: Rectangle {
|
||||
width: root.width
|
||||
height: root.height
|
||||
radius: Appearance.rounding.windowRounding * root.scale
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on x {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on y {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on width {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on height {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
|
||||
ScreencopyView {
|
||||
id: windowPreview
|
||||
anchors.fill: parent
|
||||
captureSource: GlobalStates.overviewOpen ? root.toplevel : null
|
||||
live: true
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
radius: Appearance.rounding.windowRounding * root.scale
|
||||
color: pressed ? ColorUtils.transparentize(Appearance.colors.colLayer2Active, 0.5) :
|
||||
hovered ? ColorUtils.transparentize(Appearance.colors.colLayer2Hover, 0.7) :
|
||||
ColorUtils.transparentize(Appearance.colors.colLayer2)
|
||||
border.color : ColorUtils.transparentize(Appearance.m3colors.m3outline, 0.7)
|
||||
border.width : 1
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: Appearance.font.pixelSize.smaller * 0.5
|
||||
|
||||
Image {
|
||||
id: windowIcon
|
||||
property var iconSize: {
|
||||
return Math.min(targetWindowWidth, targetWindowHeight) * (root.compactMode ? root.iconToWindowRatioCompact : root.iconToWindowRatio) / (root.monitorData?.scale ?? 1);
|
||||
}
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
source: root.iconPath
|
||||
width: iconSize
|
||||
height: iconSize
|
||||
sourceSize: Qt.size(iconSize, iconSize)
|
||||
|
||||
Behavior on width {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
Behavior on height {
|
||||
animation: Appearance.animation.elementMoveEnter.numberAnimation.createObject(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
Overview 1.0 Overview.qml
|
||||
OverviewWidget 1.0 OverviewWidget.qml
|
||||
OverviewWindow 1.0 OverviewWindow.qml
|
||||
@@ -1,11 +0,0 @@
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
property bool overviewOpen: false
|
||||
property bool superReleaseMightTrigger: true
|
||||
}
|
||||
@@ -1,137 +0,0 @@
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Hyprland
|
||||
|
||||
/**
|
||||
* Provides access to some Hyprland data not available in Quickshell.Hyprland.
|
||||
*/
|
||||
Singleton {
|
||||
id: root
|
||||
property var windowList: []
|
||||
property var addresses: []
|
||||
property var windowByAddress: ({})
|
||||
property var workspaces: []
|
||||
property var workspaceIds: []
|
||||
property var workspaceById: ({})
|
||||
property var activeWorkspace: null
|
||||
property var monitors: []
|
||||
property var layers: ({})
|
||||
|
||||
function updateWindowList() {
|
||||
getClients.running = true;
|
||||
}
|
||||
|
||||
function updateLayers() {
|
||||
getLayers.running = true;
|
||||
}
|
||||
|
||||
function updateMonitors() {
|
||||
getMonitors.running = true;
|
||||
}
|
||||
|
||||
function updateWorkspaces() {
|
||||
getWorkspaces.running = true;
|
||||
getActiveWorkspace.running = true;
|
||||
}
|
||||
|
||||
function updateAll() {
|
||||
updateWindowList();
|
||||
updateMonitors();
|
||||
updateLayers();
|
||||
updateWorkspaces();
|
||||
}
|
||||
|
||||
function biggestWindowForWorkspace(workspaceId) {
|
||||
const windowsInThisWorkspace = HyprlandData.windowList.filter(w => w.workspace.id == workspaceId);
|
||||
return windowsInThisWorkspace.reduce((maxWin, win) => {
|
||||
const maxArea = (maxWin?.size?.[0] ?? 0) * (maxWin?.size?.[1] ?? 0);
|
||||
const winArea = (win?.size?.[0] ?? 0) * (win?.size?.[1] ?? 0);
|
||||
return winArea > maxArea ? win : maxWin;
|
||||
}, null);
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
updateAll();
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Hyprland
|
||||
|
||||
function onRawEvent(event) {
|
||||
updateAll()
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: getClients
|
||||
command: ["hyprctl", "clients", "-j"]
|
||||
stdout: StdioCollector {
|
||||
id: clientsCollector
|
||||
onStreamFinished: {
|
||||
root.windowList = JSON.parse(clientsCollector.text)
|
||||
let tempWinByAddress = {};
|
||||
for (var i = 0; i < root.windowList.length; ++i) {
|
||||
var win = root.windowList[i];
|
||||
tempWinByAddress[win.address] = win;
|
||||
}
|
||||
root.windowByAddress = tempWinByAddress;
|
||||
root.addresses = root.windowList.map(win => win.address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: getMonitors
|
||||
command: ["hyprctl", "monitors", "-j"]
|
||||
stdout: StdioCollector {
|
||||
id: monitorsCollector
|
||||
onStreamFinished: {
|
||||
root.monitors = JSON.parse(monitorsCollector.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: getLayers
|
||||
command: ["hyprctl", "layers", "-j"]
|
||||
stdout: StdioCollector {
|
||||
id: layersCollector
|
||||
onStreamFinished: {
|
||||
root.layers = JSON.parse(layersCollector.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: getWorkspaces
|
||||
command: ["hyprctl", "workspaces", "-j"]
|
||||
stdout: StdioCollector {
|
||||
id: workspacesCollector
|
||||
onStreamFinished: {
|
||||
root.workspaces = JSON.parse(workspacesCollector.text);
|
||||
let tempWorkspaceById = {};
|
||||
for (var i = 0; i < root.workspaces.length; ++i) {
|
||||
var ws = root.workspaces[i];
|
||||
tempWorkspaceById[ws.id] = ws;
|
||||
}
|
||||
root.workspaceById = tempWorkspaceById;
|
||||
root.workspaceIds = root.workspaces.map(ws => ws.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: getActiveWorkspace
|
||||
command: ["hyprctl", "activeworkspace", "-j"]
|
||||
stdout: StdioCollector {
|
||||
id: activeWorkspaceCollector
|
||||
onStreamFinished: {
|
||||
root.activeWorkspace = JSON.parse(activeWorkspaceCollector.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
singleton HyprlandData 1.0 HyprlandData.qml
|
||||
singleton GlobalStates 1.0 GlobalStates.qml
|
||||
@@ -1,16 +0,0 @@
|
||||
//@ pragma UseQApplication
|
||||
//@ pragma Env QT_QUICK_CONTROLS_STYLE=Basic
|
||||
|
||||
import "./modules/overview/"
|
||||
import "./services/"
|
||||
import "./common/"
|
||||
import "./common/functions/"
|
||||
import "./common/widgets/"
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
|
||||
ShellRoot {
|
||||
Overview {}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
inputs,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
in {
|
||||
options.peaclock.enable = lib.mkEnableOption "Peaclock";
|
||||
|
||||
config.home.packages = lib.mkIf config.peaclock.enable [
|
||||
(inputs.wrappers.lib.wrapPackage
|
||||
{
|
||||
inherit pkgs;
|
||||
package = pkgs.peaclock;
|
||||
flags = {
|
||||
"--config-dir" = "/home/${username}/.peaclock";
|
||||
"--config" = "/home/${username}/.peaclock/config/digital";
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
imports = [./digital.nix];
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
{config, ...}: {
|
||||
home.file.".peaclock/config/digital" = {
|
||||
# recursive = true;
|
||||
text = let
|
||||
colors = config.stylix.base16Scheme;
|
||||
in ''
|
||||
# peaclock
|
||||
# digital config
|
||||
#
|
||||
# For more information, refer to the 'Configuration' and 'Commands'
|
||||
# sections of the programs help output with '--help' or '-h'.
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# general
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
block 2 1
|
||||
padding 2 1
|
||||
margin 2 1
|
||||
ratio 2 1
|
||||
date-padding 1
|
||||
locale 'pl_PL.utf8'
|
||||
timezone 'Europe/Warsaw'
|
||||
date '%a %b %d %p'
|
||||
mode stopwatch
|
||||
view digital
|
||||
toggle padding
|
||||
stopwatch start
|
||||
timer 10m:0s
|
||||
timer-exec 'notify-send -a peaclock "timer complete"'
|
||||
rate-input 50
|
||||
rate-refresh 250
|
||||
rate-status 5000
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# toggles
|
||||
# -----------------------------------------------------------------------------
|
||||
set hour-24 on
|
||||
set seconds on
|
||||
set date on
|
||||
set auto-size on
|
||||
set auto-ratio on
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# styles
|
||||
# -----------------------------------------------------------------------------
|
||||
style active-fg #${colors.base05}
|
||||
style inactive-fg #${colors.base03}
|
||||
style colon-fg #${colors.base07}
|
||||
style active-bg #${colors.base0E}
|
||||
style inactive-bg #${colors.base00}
|
||||
style colon-bg #${colors.base00}
|
||||
style date #${colors.base04}
|
||||
style background #${colors.base00}
|
||||
style text #${colors.base05}
|
||||
style prompt #${colors.base09}
|
||||
style success #${colors.base0A}
|
||||
style error #${colors.base02}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
_: {
|
||||
home.file.".config/rofi/config-long.rasi".text = ''
|
||||
@import "~/.config/rofi/config.rasi"
|
||||
* {
|
||||
font: "JetBrainsMono Nerd Font Mono 12";
|
||||
}
|
||||
window {
|
||||
width: 750px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
mainbox {
|
||||
orientation: vertical;
|
||||
children: [ "inputbar", "listbox" ];
|
||||
}
|
||||
listview {
|
||||
lines: 13;
|
||||
}
|
||||
inputbar {
|
||||
padding: 55px 30px;
|
||||
background-color: transparent;
|
||||
background-image: url("~/Pictures/Wallpapers/attack-on-titan-mikasa-ackerman.jpg", width);
|
||||
text-color: @foreground;
|
||||
children: [ "textbox-prompt-colon", "entry" ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
padding: 12px 20px;
|
||||
border-radius: 100%;
|
||||
background-color: @bg-alt;
|
||||
text-color: @foreground;
|
||||
}
|
||||
entry {
|
||||
expand: true;
|
||||
padding: 12px 16px;
|
||||
border-radius: 100%;
|
||||
background-color: @bg-alt;
|
||||
text-color: @foreground;
|
||||
}
|
||||
button {
|
||||
padding: 2px;
|
||||
border-radius: 100%;
|
||||
}
|
||||
element {
|
||||
spacing: 2px;
|
||||
padding: 2px;
|
||||
border-radius: 100%;
|
||||
}
|
||||
textbox {
|
||||
padding: 12px;
|
||||
border-radius: 100%;
|
||||
}
|
||||
error-message {
|
||||
border-radius: 0px;
|
||||
}
|
||||
'';
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
_: {
|
||||
imports = [
|
||||
./config-long.nix
|
||||
./rofi.nix
|
||||
];
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs = {
|
||||
rofi = {
|
||||
enable = true;
|
||||
package = pkgs.rofi;
|
||||
extraConfig = {
|
||||
modi = "drun,filebrowser,run";
|
||||
show-icons = true;
|
||||
icon-theme = "Papirus";
|
||||
font = "JetBrainsMono Nerd Font Mono 12";
|
||||
drun-display-format = "{icon} {name}";
|
||||
display-drun = " Apps";
|
||||
display-run = " Run";
|
||||
display-filebrowser = " File";
|
||||
};
|
||||
theme = let
|
||||
inherit (config.lib.formats.rasi) mkLiteral;
|
||||
in {
|
||||
"*" = {
|
||||
bg = mkLiteral "#${config.stylix.base16Scheme.base00}";
|
||||
bg-alt = mkLiteral "#${config.stylix.base16Scheme.base09}";
|
||||
foreground = mkLiteral "#${config.stylix.base16Scheme.base01}";
|
||||
selected = mkLiteral "#${config.stylix.base16Scheme.base08}";
|
||||
active = mkLiteral "#${config.stylix.base16Scheme.base0B}";
|
||||
text-selected = mkLiteral "#${config.stylix.base16Scheme.base00}";
|
||||
text-color = mkLiteral "#${config.stylix.base16Scheme.base05}";
|
||||
border-color = mkLiteral "#${config.stylix.base16Scheme.base0F}";
|
||||
urgent = mkLiteral "#${config.stylix.base16Scheme.base0E}";
|
||||
};
|
||||
"window" = {
|
||||
transparency = "real";
|
||||
width = mkLiteral "1000px";
|
||||
location = mkLiteral "center";
|
||||
anchor = mkLiteral "center";
|
||||
fullscreen = false;
|
||||
x-offset = mkLiteral "0px";
|
||||
y-offset = mkLiteral "0px";
|
||||
cursor = "default";
|
||||
enabled = true;
|
||||
border-radius = mkLiteral "15px";
|
||||
background-color = mkLiteral "@bg";
|
||||
};
|
||||
"mainbox" = {
|
||||
enabled = true;
|
||||
spacing = mkLiteral "0px";
|
||||
orientation = mkLiteral "horizontal";
|
||||
children = map mkLiteral [
|
||||
"imagebox"
|
||||
"listbox"
|
||||
];
|
||||
background-color = mkLiteral "transparent";
|
||||
};
|
||||
"imagebox" = {
|
||||
padding = mkLiteral "20px";
|
||||
background-color = mkLiteral "transparent";
|
||||
background-image = mkLiteral ''url("~/Pictures/Wallpapers/fire-nation.jpg", height)'';
|
||||
orientation = mkLiteral "vertical";
|
||||
children = map mkLiteral [
|
||||
"inputbar"
|
||||
"dummy"
|
||||
"mode-switcher"
|
||||
];
|
||||
};
|
||||
"listbox" = {
|
||||
spacing = mkLiteral "20px";
|
||||
padding = mkLiteral "20px";
|
||||
background-color = mkLiteral "transparent";
|
||||
orientation = mkLiteral "vertical";
|
||||
children = map mkLiteral [
|
||||
"message"
|
||||
"listview"
|
||||
];
|
||||
};
|
||||
"dummy" = {
|
||||
background-color = mkLiteral "transparent";
|
||||
};
|
||||
"inputbar" = {
|
||||
enabled = true;
|
||||
spacing = mkLiteral "10px";
|
||||
padding = mkLiteral "10px";
|
||||
border-radius = mkLiteral "10px";
|
||||
background-color = mkLiteral "@bg-alt";
|
||||
text-color = mkLiteral "@foreground";
|
||||
children = map mkLiteral [
|
||||
"textbox-prompt-colon"
|
||||
"entry"
|
||||
];
|
||||
};
|
||||
"textbox-prompt-colon" = {
|
||||
enabled = true;
|
||||
expand = false;
|
||||
str = "";
|
||||
background-color = mkLiteral "inherit";
|
||||
text-color = mkLiteral "inherit";
|
||||
};
|
||||
"entry" = {
|
||||
enabled = true;
|
||||
background-color = mkLiteral "inherit";
|
||||
text-color = mkLiteral "inherit";
|
||||
cursor = mkLiteral "text";
|
||||
placeholder = "Search";
|
||||
placeholder-color = mkLiteral "inherit";
|
||||
};
|
||||
"mode-switcher" = {
|
||||
enabled = true;
|
||||
spacing = mkLiteral "20px";
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "@foreground";
|
||||
};
|
||||
"button" = {
|
||||
padding = mkLiteral "15px";
|
||||
border-radius = mkLiteral "10px";
|
||||
background-color = mkLiteral "@bg-alt";
|
||||
text-color = mkLiteral "inherit";
|
||||
cursor = mkLiteral "pointer";
|
||||
};
|
||||
"button selected" = {
|
||||
background-color = mkLiteral "@selected";
|
||||
text-color = mkLiteral "@foreground";
|
||||
};
|
||||
"listview" = {
|
||||
enabled = true;
|
||||
columns = 1;
|
||||
lines = 8;
|
||||
cycle = true;
|
||||
dynamic = true;
|
||||
scrollbar = false;
|
||||
layout = mkLiteral "vertical";
|
||||
reverse = false;
|
||||
fixed-height = true;
|
||||
fixed-columns = true;
|
||||
spacing = mkLiteral "10px";
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "@foreground";
|
||||
cursor = "default";
|
||||
};
|
||||
"element" = {
|
||||
enabled = true;
|
||||
spacing = mkLiteral "15px";
|
||||
padding = mkLiteral "8px";
|
||||
border-radius = mkLiteral "10px";
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "@text-color";
|
||||
cursor = mkLiteral "pointer";
|
||||
};
|
||||
"element normal.normal" = {
|
||||
background-color = mkLiteral "inherit";
|
||||
text-color = mkLiteral "@text-color";
|
||||
};
|
||||
"element normal.urgent" = {
|
||||
background-color = mkLiteral "@urgent";
|
||||
text-color = mkLiteral "@text-color";
|
||||
};
|
||||
"element normal.active" = {
|
||||
background-color = mkLiteral "inherit";
|
||||
text-color = mkLiteral "@text-color";
|
||||
};
|
||||
"element selected.normal" = {
|
||||
background-color = mkLiteral "@selected";
|
||||
text-color = mkLiteral "@foreground";
|
||||
};
|
||||
"element selected.urgent" = {
|
||||
background-color = mkLiteral "@urgent";
|
||||
text-color = mkLiteral "@text-selected";
|
||||
};
|
||||
"element selected.active" = {
|
||||
background-color = mkLiteral "@urgent";
|
||||
text-color = mkLiteral "@text-selected";
|
||||
};
|
||||
"element-icon" = {
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "inherit";
|
||||
size = mkLiteral "36px";
|
||||
cursor = mkLiteral "inherit";
|
||||
};
|
||||
"element-text" = {
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "inherit";
|
||||
cursor = mkLiteral "inherit";
|
||||
vertical-align = mkLiteral "0.5";
|
||||
horizontal-align = mkLiteral "0.0";
|
||||
};
|
||||
"message" = {
|
||||
background-color = mkLiteral "transparent";
|
||||
};
|
||||
"textbox" = {
|
||||
padding = mkLiteral "15px";
|
||||
border-radius = mkLiteral "10px";
|
||||
background-color = mkLiteral "@bg-alt";
|
||||
text-color = mkLiteral "@foreground";
|
||||
vertical-align = mkLiteral "0.5";
|
||||
horizontal-align = mkLiteral "0.0";
|
||||
};
|
||||
"error-message" = {
|
||||
padding = mkLiteral "15px";
|
||||
border-radius = mkLiteral "20px";
|
||||
background-color = mkLiteral "@bg";
|
||||
text-color = mkLiteral "@foreground";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,35 +1,7 @@
|
||||
{
|
||||
pkgs,
|
||||
username,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
# hyprland
|
||||
swww
|
||||
grim
|
||||
slurp
|
||||
wl-clipboard
|
||||
swappy
|
||||
ydotool
|
||||
hyprpolkitagent
|
||||
hyprland-qtutils # needed for banners and ANR messages
|
||||
# pyprland
|
||||
pyprland
|
||||
|
||||
(import ./emopicker9000.nix {inherit pkgs;})
|
||||
(import ./hm-find.nix {inherit pkgs;})
|
||||
(import ./keybinds.nix {inherit pkgs username;})
|
||||
(import ./note.nix {inherit pkgs;})
|
||||
(import ./note-from-clipboard.nix {inherit pkgs;})
|
||||
{pkgs, ...}: {
|
||||
home.packages = [
|
||||
(import ./nvidia-offload.nix {inherit pkgs;})
|
||||
(import ./rofi-launcher.nix {inherit pkgs;})
|
||||
(import ./screenshootin.nix {inherit pkgs;})
|
||||
(import ./task-waybar.nix {inherit pkgs;})
|
||||
(import ./wallsetter.nix {
|
||||
inherit pkgs;
|
||||
inherit username;
|
||||
})
|
||||
(import ./web-search.nix {inherit pkgs;})
|
||||
(import ./restart.noctalia.nix {inherit pkgs;})
|
||||
(import ./screenshootin.nix {inherit pkgs;})
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
{pkgs}:
|
||||
pkgs.writeShellScriptBin "emopicker9000" ''
|
||||
# check if rofi is already running
|
||||
if pidof rofi > /dev/null; then
|
||||
pkill rofi
|
||||
fi
|
||||
|
||||
# Get user selection via wofi from emoji file.
|
||||
chosen=$(cat $HOME/.config/.emoji | ${pkgs.rofi}/bin/rofi -i -dmenu -config ~/.config/rofi/config-long.rasi | awk '{print $1}')
|
||||
|
||||
# Exit if none chosen.
|
||||
[ -z "$chosen" ] && exit
|
||||
|
||||
# If you run this command with an argument, it will automatically insert the
|
||||
# character. Otherwise, show a message that the emoji has been copied.
|
||||
if [ -n "$1" ]; then
|
||||
${pkgs.ydotool}/bin/ydotool type "$chosen"
|
||||
else
|
||||
printf "$chosen" | ${pkgs.wl-clipboard}/bin/wl-copy
|
||||
${pkgs.libnotify}/bin/notify-send "'$chosen' copied to clipboard." &
|
||||
fi
|
||||
''
|
||||
@@ -1,60 +0,0 @@
|
||||
{pkgs}:
|
||||
pkgs.writeShellScriptBin "hm-find" ''
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Script Metadata
|
||||
#===============================================
|
||||
# This script searches recent journalctl entries for Home Manager errors
|
||||
# It identifies backup files that prevent rebuilds and allows removal.
|
||||
# Author: Don Williams
|
||||
# Creation Date: May 6th, 2025
|
||||
# Revision History:
|
||||
#-----------------------------------------------
|
||||
# 0.1 - 5/6/25 - Initial version
|
||||
# 0.2 - 5/7/25 - Improved messaging, added log directory check
|
||||
|
||||
# Display WARNING message
|
||||
echo "==============================================="
|
||||
echo " ⚠️ WARNING ⚠️ "
|
||||
echo "==============================================="
|
||||
echo "*** This script is experimental! ***"
|
||||
echo "It will attempt to find old backup files that are preventing Home Manager from rebuilding."
|
||||
echo "If conflicting files are found, you will be prompted to remove them."
|
||||
echo "A log of any deletions will be stored in \$HOME/hm-logs."
|
||||
echo "==============================================="
|
||||
|
||||
# Define the time range (default: last 30 minutes)
|
||||
TIME_RANGE="30m"
|
||||
LOG_DIR="$HOME/hm-logs"
|
||||
LOG_FILE="$LOG_DIR/hm-cleanup-$(date +'%Y-%m-%d_%H-%M-%S').log"
|
||||
|
||||
# Ensure the log directory exists
|
||||
if [ ! -d "$LOG_DIR" ]; then
|
||||
echo "Creating log directory: $LOG_DIR"
|
||||
mkdir -p "$LOG_DIR"
|
||||
fi
|
||||
|
||||
# Search journal logs for backup conflicts and extract file paths
|
||||
FILES=$(journalctl --since "-$TIME_RANGE" -xe | grep hm-activate | awk -F "'|'" '/would be clobbered by backing up/ {print $2}')
|
||||
|
||||
# Check if any files were found
|
||||
if [ -z "$FILES" ]; then
|
||||
echo "No conflicting backup files found in the last $TIME_RANGE."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Display found backup files
|
||||
echo "🚨 The following backup files are preventing Home Manager from rebuilding:"
|
||||
echo "$FILES" | tr ' ' '\n'
|
||||
|
||||
# Ask for user confirmation before deletion
|
||||
read -p "❓ Do you want to remove these files? (y/N): " confirm
|
||||
|
||||
if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
|
||||
echo "🗑️ Deleting files..." | tee -a "$LOG_FILE"
|
||||
echo "$FILES" | xargs rm -v | tee -a "$LOG_FILE"
|
||||
echo "✅ Cleanup completed at $(date)" | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "⛔ No files were removed." | tee -a "$LOG_FILE"
|
||||
fi
|
||||
''
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
desktopEntriesPath = "/home/${username}/.local/state/home-manager/gcroots/current-home/home-path/share/applications/";
|
||||
in
|
||||
pkgs.writeShellScriptBin "list-keybinds" ''
|
||||
# check if rofi is already running
|
||||
if pidof rofi > /dev/null; then
|
||||
pkill rofi
|
||||
fi
|
||||
|
||||
msg=' = Windows/Super/CAPS LOCK (Enter nie wykonuje skrótu)'
|
||||
keybinds=$(cat ~/.config/hypr/hyprland.conf | grep -E '^bind')
|
||||
|
||||
# replace SUPER with SUPER and clean up paths
|
||||
display_keybinds=$(echo "$keybinds" | sed 's/\SUPER//g' | sed 's|${desktopEntriesPath}/||g')
|
||||
|
||||
# remove "bind=" and "bindm=" prefixes
|
||||
display_keybinds=$(echo "$display_keybinds" | sed 's/^bind=//' | sed 's/^bindm=/🖱️/')
|
||||
|
||||
# add + before CONTROL, SHIFT, ALT when they appear after removed SUPER
|
||||
display_keybinds=$(echo "$display_keybinds" | sed 's/ CONTROL/ + CONTROL/g' | sed 's/ SHIFT/ + SHIFT/g' | sed 's/ ALT/ + ALT/g')
|
||||
|
||||
# replace commas: first comma -> " +", second comma -> " =", remaining commas -> " ->"
|
||||
display_keybinds=$(echo "$display_keybinds" | sed 's/,/ +/1' | sed 's/,/ =/1' | sed 's/,/ ->/g')
|
||||
|
||||
# use rofi to display the keybinds with the modified content
|
||||
echo "$display_keybinds" | rofi -dmenu -i -config ~/.config/rofi/config-long.rasi -mesg "$msg"
|
||||
|
||||
''
|
||||
@@ -1,20 +0,0 @@
|
||||
{pkgs, ...}:
|
||||
pkgs.writeShellScriptBin "note-from-clipboard" ''
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Check clipboard content type
|
||||
clipboard_type=$(${pkgs.wl-clipboard}/bin/wl-paste --list-types | head -n 1)
|
||||
|
||||
if [[ "$clipboard_type" == "text/plain"* ]]; then
|
||||
# It's text, let's create a note
|
||||
${pkgs.wl-clipboard}/bin/wl-paste | note
|
||||
if [ $? -eq 0 ]; then
|
||||
${pkgs.libnotify}/bin/notify-send -t 3000 "📝 Note Created" "Clipboard content added as a new note."
|
||||
else
|
||||
${pkgs.libnotify}/bin/notify-send -t 5000 -u critical "❌ Note Creation Failed" "There was an error creating the note."
|
||||
fi
|
||||
else
|
||||
# It's not text, so we do nothing and notify the user
|
||||
${pkgs.libnotify}/bin/notify-send -t 4000 -u low "📋 Note Skipped" "Clipboard does not contain text."
|
||||
fi
|
||||
''
|
||||
@@ -1,244 +0,0 @@
|
||||
{pkgs, ...}:
|
||||
pkgs.writeShellScriptBin "note" ''
|
||||
|
||||
# Colors for nice output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
BLUE='\033[0;34m'
|
||||
MAGENTA='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
WHITE='\033[1;37m'
|
||||
GRAY='\033[0;37m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# XDG-compliant notes directory and file
|
||||
NOTES_DIR="$HOME/.local/share/notes"
|
||||
NOTES_FILE="$NOTES_DIR/notes.txt"
|
||||
|
||||
# Create notes directory if it doesn't exist
|
||||
mkdir -p "$NOTES_DIR"
|
||||
|
||||
# Function to display usage
|
||||
show_usage() {
|
||||
echo -e "''${BOLD}''${BLUE}📝 Note Manager''${NC}"
|
||||
echo -e "''${GRAY}Usage:''${NC}"
|
||||
echo -e " ''${CYAN}note''${NC} ''${YELLOW}<text>''${NC} - Add a new note"
|
||||
echo -e " ''${CYAN}note''${NC} - Display all notes"
|
||||
echo -e " ''${CYAN}note del''${NC} ''${YELLOW}<number>''${NC} - Delete note by number"
|
||||
echo -e " ''${CYAN}note clear''${NC} - Clear all notes"
|
||||
echo -e " ''${CYAN}echo 'text' | note''${NC} - Add note from stdin"
|
||||
echo -e " ''${CYAN}cat file | note''${NC} - Add file contents as note"
|
||||
echo ""
|
||||
echo -e "''${GRAY}Examples:''${NC}"
|
||||
echo -e " ''${GREEN}note call plumber tomorrow''${NC}"
|
||||
echo -e " ''${GREEN}cat todo.txt | note''${NC}"
|
||||
echo -e " ''${GREEN}note del 3''${NC}"
|
||||
}
|
||||
|
||||
# Function to add a note
|
||||
add_note() {
|
||||
local note_text="$1"
|
||||
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
local date_only=$(date '+%Y-%m-%d')
|
||||
|
||||
# Create notes file if it doesn't exist
|
||||
touch "$NOTES_FILE"
|
||||
|
||||
# Get next note number
|
||||
local note_num=1
|
||||
if [ -f "$NOTES_FILE" ] && [ -s "$NOTES_FILE" ]; then
|
||||
note_num=$(grep -E "^#[0-9]+" "$NOTES_FILE" | sed 's/^#\([0-9]*\).*/\1/' | sort -n | tail -1)
|
||||
note_num=$((note_num + 1))
|
||||
fi
|
||||
|
||||
# Add the note with proper formatting
|
||||
{
|
||||
echo "#$note_num [$timestamp]"
|
||||
echo "$note_text"
|
||||
echo ""
|
||||
} >> "$NOTES_FILE"
|
||||
|
||||
echo -e "''${GREEN}✓''${NC} Note #$note_num added ''${GRAY}($date_only)''${NC}"
|
||||
}
|
||||
|
||||
# Function to display all notes
|
||||
display_notes() {
|
||||
if [ ! -f "$NOTES_FILE" ] || [ ! -s "$NOTES_FILE" ]; then
|
||||
echo -e "''${YELLOW}📝 No notes found''${NC}"
|
||||
echo -e "''${GRAY}Use ''${CYAN}note <text>''${GRAY} to add your first note''${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "''${BOLD}''${BLUE}📝 Your Notes''${NC}"
|
||||
echo -e "''${GRAY}📁 $NOTES_FILE''${NC}"
|
||||
echo -e "''${GRAY}$(printf '%.0s─' {1..50})''${NC}"
|
||||
|
||||
local in_note=false
|
||||
local note_content=""
|
||||
|
||||
while IFS= read -r line; do
|
||||
# Check if line starts with # followed by numbers and space and [
|
||||
if echo "$line" | grep -q "^#[0-9][0-9]* \["; then
|
||||
# Print previous note content if exists
|
||||
if [ "$in_note" = true ] && [ -n "$note_content" ]; then
|
||||
echo -e "$note_content"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Extract note number and timestamp
|
||||
local num=$(echo "$line" | sed 's/^#\([0-9]*\) \[.*/\1/')
|
||||
local timestamp=$(echo "$line" | sed 's/^#[0-9]* \[\(.*\)\]/\1/')
|
||||
local date_part=$(echo "$timestamp" | cut -d' ' -f1)
|
||||
local time_part=$(echo "$timestamp" | cut -d' ' -f2)
|
||||
|
||||
echo -e "''${BOLD}''${CYAN}#$num''${NC} ''${GRAY}[$date_part ''${YELLOW}$time_part''${GRAY}]''${NC}"
|
||||
in_note=true
|
||||
note_content=""
|
||||
elif [ -n "$line" ] && [ "$in_note" = true ]; then
|
||||
# Accumulate note content
|
||||
if [ -z "$note_content" ]; then
|
||||
note_content="''${WHITE}$line''${NC}"
|
||||
else
|
||||
note_content="$note_content\n''${WHITE}$line''${NC}"
|
||||
fi
|
||||
elif [ -z "$line" ] && [ "$in_note" = true ]; then
|
||||
# End of current note
|
||||
if [ -n "$note_content" ]; then
|
||||
echo -e "$note_content"
|
||||
echo ""
|
||||
fi
|
||||
in_note=false
|
||||
note_content=""
|
||||
fi
|
||||
done < "$NOTES_FILE"
|
||||
|
||||
# Print last note if file doesn't end with empty line
|
||||
if [ "$in_note" = true ] && [ -n "$note_content" ]; then
|
||||
echo -e "$note_content"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
local total_notes=$(grep -c "^#[0-9]" "$NOTES_FILE")
|
||||
echo -e "''${GRAY}$(printf '%.0s─' {1..50})''${NC}"
|
||||
echo -e "''${GRAY}Total: ''${BOLD}$total_notes''${NC} ''${GRAY}notes''${NC}"
|
||||
}
|
||||
|
||||
# Function to delete a note
|
||||
delete_note() {
|
||||
local note_num="$1"
|
||||
|
||||
if [ ! -f "$NOTES_FILE" ] || [ ! -s "$NOTES_FILE" ]; then
|
||||
echo -e "''${RED}✗''${NC} No notes found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! echo "$note_num" | grep -q "^[0-9][0-9]*$"; then
|
||||
echo -e "''${RED}✗''${NC} Invalid note number: $note_num"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if note exists
|
||||
if ! grep -q "^#$note_num " "$NOTES_FILE"; then
|
||||
echo -e "''${RED}✗''${NC} Note #$note_num not found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create temporary file without the specified note
|
||||
local temp_file=$(mktemp)
|
||||
local skip_lines=false
|
||||
|
||||
while IFS= read -r line; do
|
||||
if echo "$line" | grep -q "^#[0-9][0-9]* "; then
|
||||
local current_num=$(echo "$line" | sed 's/^#\([0-9]*\) .*/\1/')
|
||||
if [ "$current_num" = "$note_num" ]; then
|
||||
skip_lines=true
|
||||
continue
|
||||
else
|
||||
skip_lines=false
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$skip_lines" = false ]; then
|
||||
echo "$line" >> "$temp_file"
|
||||
elif [ -z "$line" ]; then
|
||||
# Stop skipping when we hit an empty line (end of note)
|
||||
skip_lines=false
|
||||
fi
|
||||
done < "$NOTES_FILE"
|
||||
|
||||
mv "$temp_file" "$NOTES_FILE"
|
||||
echo -e "''${GREEN}✓''${NC} Note #$note_num deleted"
|
||||
}
|
||||
|
||||
# Function to clear all notes
|
||||
clear_notes() {
|
||||
if [ ! -f "$NOTES_FILE" ] || [ ! -s "$NOTES_FILE" ]; then
|
||||
echo -e "''${YELLOW}📝 No notes to clear''${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
local total_notes=$(grep -c "^#[0-9]" "$NOTES_FILE")
|
||||
echo -e "''${YELLOW}⚠''${NC} This will delete all $total_notes notes. Are you sure? ''${GRAY}[y/N]''${NC}"
|
||||
read -r confirmation
|
||||
|
||||
if echo "$confirmation" | grep -qi "^y"; then
|
||||
> "$NOTES_FILE"
|
||||
echo -e "''${GREEN}✓''${NC} All notes cleared"
|
||||
else
|
||||
echo -e "''${BLUE}ℹ''${NC} Operation cancelled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main script logic
|
||||
main() {
|
||||
# Check if input is being piped
|
||||
if [ ! -t 0 ]; then
|
||||
# Read from stdin (pipe)
|
||||
local piped_content=""
|
||||
while IFS= read -r line; do
|
||||
if [ -z "$piped_content" ]; then
|
||||
piped_content="$line"
|
||||
else
|
||||
piped_content="$piped_content"$'\n'"$line"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$piped_content" ]; then
|
||||
add_note "$piped_content"
|
||||
else
|
||||
echo -e "''${RED}✗''${NC} No input received from pipe"
|
||||
exit 1
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
# Handle command line arguments
|
||||
case "$1" in
|
||||
"")
|
||||
display_notes
|
||||
;;
|
||||
"del")
|
||||
if [ -z "$2" ]; then
|
||||
echo -e "''${RED}✗''${NC} Please specify note number to delete"
|
||||
echo -e "''${GRAY}Usage: ''${CYAN}note del <number>''${NC}"
|
||||
exit 1
|
||||
fi
|
||||
delete_note "$2"
|
||||
;;
|
||||
"clear")
|
||||
clear_notes
|
||||
;;
|
||||
"help"|"--help"|"-h")
|
||||
show_usage
|
||||
;;
|
||||
*)
|
||||
# Everything else is treated as note content
|
||||
add_note "$*"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
''
|
||||
@@ -1,8 +0,0 @@
|
||||
{pkgs}:
|
||||
pkgs.writeShellScriptBin "rofi-launcher" ''
|
||||
# check if rofi is already running
|
||||
if pidof rofi > /dev/null; then
|
||||
pkill rofi
|
||||
fi
|
||||
rofi -show drun
|
||||
''
|
||||
@@ -1,5 +0,0 @@
|
||||
{pkgs}:
|
||||
pkgs.writeShellScriptBin "task-waybar" ''
|
||||
sleep 0.1
|
||||
${pkgs.swaynotificationcenter}/bin/swaync-client -t &
|
||||
''
|
||||
@@ -1,23 +0,0 @@
|
||||
{pkgs, ...}:
|
||||
pkgs.writeShellScriptBin "wallsetter" ''
|
||||
|
||||
TIMEOUT=720
|
||||
|
||||
for pid in $(pidof -o %PPID -x wallsetter); do
|
||||
kill $pid
|
||||
done
|
||||
|
||||
if ! [ -d ~/Pictures/Wallpapers ]; then notify-send -t 5000 "~/Pictures/Wallpapers does not exist" && exit 1; fi
|
||||
if [ $(ls -1 ~/Pictures/Wallpapers | wc -l) -lt 1 ]; then notify-send -t 9000 "The wallpaper folder is expected to have more than 1 image. Exiting Wallsetter." && exit 1; fi
|
||||
|
||||
while true; do
|
||||
while [ "$WALLPAPER" == "$PREVIOUS" ]; do
|
||||
WALLPAPER=$(find ~/Pictures/Wallpapers -name '*' | awk '!/.git/' | tail -n +2 | shuf -n 1)
|
||||
done
|
||||
|
||||
PREVIOUS=$WALLPAPER
|
||||
|
||||
${pkgs.swww}/bin/swww img "$WALLPAPER" --transition-type random --transition-step 1 --transition-fps 60
|
||||
sleep $TIMEOUT
|
||||
done
|
||||
''
|
||||
@@ -1,59 +0,0 @@
|
||||
{pkgs}:
|
||||
pkgs.writeShellScriptBin "web-search" ''
|
||||
# check if rofi is already running
|
||||
if pidof rofi > /dev/null; then
|
||||
pkill rofi
|
||||
fi
|
||||
|
||||
declare -A URLS
|
||||
|
||||
URLS=(
|
||||
[" Search"]="https://search.garandplg.com/search?q="
|
||||
["❄️ Nix Unstable Packages"]="https://search.nixos.org/packages?channel=unstable&query="
|
||||
["❄️ Nix Options"]="https://search.nixos.org/options?query="
|
||||
["❄️ Nix Wiki"]="https://wiki.nixos.org/w/index.php?search="
|
||||
["❄️ Home Manager Options"]="https://home-manager-options.extranix.com/release=master?query="
|
||||
[" Kalkulator walutowy EUR"]="https://www.money.pl/pieniadze/kalkulator/?currencyFrom=EUR¤cyTo=PLN&amount="
|
||||
["\$ Kalkulator walutowy USD"]="https://www.money.pl/pieniadze/kalkulator/?currencyFrom=USD¤cyTo=PLN&amount="
|
||||
[" YouTube"]="https://www.youtube.com/results?search_query="
|
||||
[" Wikipedia PL"]="https://pl.wikipedia.org/w/index.php?search="
|
||||
[" StackOverflow"]="https://stackoverflow.com/search?q="
|
||||
[" Eneba"]="https://www.eneba.com/pl/store/all?text="
|
||||
[" Kinguin"]="https://www.kinguin.net/listing?active=1&hideUnavailable=0&type=kinguin?phrase="
|
||||
[" Instant Gaming"]="https://www.instant-gaming.com/pl/search/?q="
|
||||
[" Morele"]="https://www.morele.net/wyszukiwarka/?q="
|
||||
[" X-kom"]="https://www.x-kom.pl/szukaj?q="
|
||||
[" Komputrnik"]="https://www.komputronik.pl/search/category/1?q="
|
||||
[" Allegro"]="https://allegro.pl/listing?string="
|
||||
)
|
||||
|
||||
# List for rofi
|
||||
gen_list() {
|
||||
for i in "''${!URLS[@]}"
|
||||
do
|
||||
echo "$i"
|
||||
done
|
||||
}
|
||||
|
||||
main() {
|
||||
# Pass the list to rofi
|
||||
platform=$( (gen_list) | ${pkgs.rofi}/bin/rofi -dmenu -config ~/.config/rofi/config-long.rasi )
|
||||
|
||||
if [[ -n "$platform" ]]; then
|
||||
query=$( (echo ) | ${pkgs.rofi}/bin/rofi -dmenu -config ~/.config/rofi/config-long.rasi )
|
||||
|
||||
if [[ -n "$query" ]]; then
|
||||
url=''${URLS[$platform]}$query
|
||||
xdg-open "$url"
|
||||
else
|
||||
exit
|
||||
fi
|
||||
else
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
exit 0
|
||||
''
|
||||
@@ -1,10 +1,7 @@
|
||||
{host, ...}: {
|
||||
stylix.targets = {
|
||||
librewolf.profileNames = ["${host}"];
|
||||
waybar.enable = false;
|
||||
rofi.enable = false;
|
||||
hyprland.enable = false;
|
||||
hyprlock.enable = false;
|
||||
vscode.enable = false;
|
||||
zed.enable = false;
|
||||
vesktop.enable = false;
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
services.swaync = {
|
||||
enable = true;
|
||||
package = pkgs.swaynotificationcenter;
|
||||
};
|
||||
|
||||
imports = [
|
||||
./settings.nix
|
||||
./style.nix
|
||||
];
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user