diff --git a/custom/waybar/config b/custom/waybar/config
new file mode 100644
index 0000000..283975d
--- /dev/null
+++ b/custom/waybar/config
@@ -0,0 +1,152 @@
+// -*- mode: jsonc -*-
+{
+ "layer": "top",
+ "position": "bottom",
+ "height": 30,
+ // "width": 1280, // Waybar width
+ "spacing": 4, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": [
+ "hyprland/workspaces",
+ ],
+ "modules-right": [
+ "pulseaudio",
+ "network",
+ "cpu",
+ "memory",
+ "battery",
+ "clock",
+ "tray",
+ ],
+ // Modules configuration
+ "keyboard-state": {
+ "numlock": true,
+ "capslock": true,
+ "format": "{name} {icon}",
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+ "hyprland/mode": {
+ "format": "{}"
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "tray": {
+ // "icon-size": 21,
+ "spacing": 10,
+ // "icons": {
+ // "blueman": "bluetooth",
+ // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
+ // }
+ },
+ "clock": {
+ // "timezone": "America/New_York",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": "{:%Y-%m-%d}"
+ },
+ "cpu": {
+ "format": "{usage}% ",
+ "tooltip": false
+ },
+ "memory": {
+ "format": "{}% "
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", ""]
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{percent}% {icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""]
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "BAT: {capacity}%",
+ "format-full": "FULL: {capacity}%",
+ "format-charging": "CHR: {capacity}%",
+ "format-plugged": "PLG: {capacity}%",
+ "format-alt": "{time} {icon}",
+ },
+ "battery#bat2": {
+ "bat": "BAT2"
+ },
+ "power-profiles-daemon": {
+ "format": "{icon}",
+ "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
+ "tooltip": true,
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": ""
+ }
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{essid} ({signalStrength}%) ",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "format-alt": "{ifname}: {ipaddr}/{cidr}"
+ },
+ "pulseaudio": {
+ // "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "on-click": "pavucontrol"
+ },
+ "custom/media": {
+ "format": "{icon} {text}",
+ "return-type": "json",
+ "max-length": 40,
+ "format-icons": {
+ "spotify": "",
+ "default": "🎜"
+ },
+ "escape": true,
+ "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
+ // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
+ },
+ "custom/power": {
+ "format" : "⏻ ",
+ "tooltip": false,
+ "menu": "on-click",
+ "menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
+ "menu-actions": {
+ "shutdown": "shutdown",
+ "reboot": "reboot",
+ "suspend": "systemctl suspend",
+ "hibernate": "systemctl hibernate"
+ }
+ }
+}
diff --git a/custom/waybar/style.css b/custom/waybar/style.css
new file mode 100644
index 0000000..bccab73
--- /dev/null
+++ b/custom/waybar/style.css
@@ -0,0 +1,324 @@
+@define-color bg-color rgb(68, 71, 90); /* #3C413C */
+@define-color bg-color-tray rgb (40, 42, 54); /* #3C4144 */
+@define-color bg-color-ws rgb (40, 42, 54); /* #3C4144 */
+@define-color bg-color-0 rgb (40, 42, 54); /* #3C4144 */
+@define-color bg-color-1 rgb(40, 42, 54); /* #475f94 */
+@define-color bg-color-2 rgb(40, 42, 54); /* #107AB0 */
+@define-color bg-color-3 rgb(40, 42, 54); /* #017374 */
+@define-color bg-color-4 rgb(40, 42, 54); /* #1F3B4D */
+@define-color bg-color-5 rgb(40, 42, 54); /* #10A674 */
+@define-color bg-color-6 rgb(40, 42, 54); /* #4984B8 */
+@define-color bg-color-7 rgb(40, 42, 54); /* #000133 */
+@define-color bg-color-8 rgb(40, 42, 54); /* #08787F */
+@define-color bg-color-9 rgb(40, 42, 54); /* #214761 */
+@define-color bg-color-10 rgb(40, 42, 54); /* #6C3461 */
+@define-color bg-color-11 rgb(40, 42, 54); /* #005249 */
+@define-color bg-color-12 rgb(40, 42, 54); /* #31668A */
+@define-color bg-color-13 rgb(40, 42, 54); /* #6A6E09 */
+@define-color bg-color-14 rgb(40, 42, 54); /* #5B7C99 */
+@define-color bg-color-15 rgb(40, 42, 54); /* #1D2021 */
+@define-color bg-color-16 rgb(40, 42, 54); /* #29293D */
+
+@define-color fg-color rgb (248, 248, 242); /* #f3f4f5 */
+@define-color alert-bg-color rgb (255, 85, 85); /* #bd2c40 */
+@define-color alert-fg-color rgb (248, 248, 242); /* #FFFFFF */
+@define-color inactive-fg-color rgb(144, 153, 162); /* #9099a2 */
+@define-color inactive-bg-color rgb(68, 71, 90); /* #404552 */
+
+* {
+ border: none;
+ border-radius: 0;
+ font-family: Dejavu Sans Mono, FontAwesome, Material Icons, sans-serif;
+ font-size: 16px;
+ min-height: 0;
+ opacity: 1.0;
+
+}
+
+window#waybar {
+ background-color: rgba(40, 42, 54, 0.5);
+ border-bottom: none;
+ color: @fg-color;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.4;
+}
+
+window#waybar.termite {
+ background-color: @bg-color;
+}
+
+window#waybar.chromium {
+ background-color: @bg-color;
+ border: none;
+}
+
+#workspaces button {
+ padding: 0 5px;
+ background-color: transparent;
+ color: @fg-color;
+ border-bottom: 3px solid transparent;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+ box-shadow: inherit;
+ border-bottom: 3px solid @fg-color;
+}
+
+#workspaces button.active {
+ background-color: @bg-color;
+ border-bottom: 3px solid @fg-color;
+}
+
+#workspaces button.urgent {
+ background-color: @alert-bg-color;
+}
+
+#mode {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color;
+ border-bottom: 3px solid @fg-color;
+}
+
+#tray {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-tray;
+ color: @fg-color;
+}
+
+
+#clock {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-1;
+ color: @fg-color;
+}
+
+#custom-weather {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-2;
+ color: @fg-color;
+}
+
+#custom-covid {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-16;
+ color: @fg-color;
+}
+
+#backlight {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-3;
+ color: @fg-color;
+}
+
+#battery {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-4;
+ color: @fg-color;
+}
+#battery.charging {
+ color: @fg-color;
+ background-color: @bg-color;
+}
+#battery.warning:not(.charging) {
+ color: @alert-fg-color;
+ background-color: @alert-bg-color;
+}
+#battery.critical:not(.charging) {
+ background-color: @alert-bg-color;
+ color: @fg-color;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#custom-bat0,
+#custom-bat0.charging {
+ padding: 0 10px;
+ margin: 0 4px;
+ color: @fg-color;
+ background-color: @bg-color-10;
+}
+#custom-bat0.warning:not(.charging):not(.full) {
+ color: @alert-fg-color;
+ background-color: @alert-bg-color;
+}
+#custom-bat0.critical:not(.charging):not(.full) {
+ background-color: @alert-bg-color;
+ color: @fg-color;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#network {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-6;
+ color: @fg-color;
+}
+
+#bluetooth {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-6;
+ color: @fg-color;
+}
+
+#custom-vpn {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-6;
+ color: @fg-color;
+}
+
+#pulseaudio {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-12;
+ color: @fg-color;
+}
+
+#temperature {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-7;
+ color: @fg-color;
+}
+
+#backlight {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-8;
+ color: @fg-color;
+}
+
+#pulseaudio {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-9;
+ color: @fg-color;
+}
+
+#custom-media {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-10;
+ color: @fg-color;
+}
+
+#cpu {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-13;
+ color: @fg-color;
+}
+
+#memory {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-5;
+ color: @fg-color;
+}
+
+#idle_inhibitor {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-14;
+ color: @fg-color;
+}
+
+#mpd {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-15;
+ color: @fg-color;
+}
+
+#custom-spotify {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-15;
+ color: @fg-color;
+}
+
+#custom-kbd {
+ padding: 0 10px;
+ margin: 0 4px;
+ background-color: @bg-color-11;
+ color: @fg-color;
+}
+
+#custom-kbd.none {
+ background-color: transparent;
+ color: transparent;
+}
+
+@keyframes blink {
+ to {
+ background-color: @fg-color;
+ color: @bg-color;
+ }
+}
+
+label:focus {
+ background-color: @bg-color;
+}
+
+#network.disconnected {
+ background-color: @alert-bg-color;
+}
+
+#custom-vpn.disconnected {
+ background-color: @alert-bg-color;
+}
+
+#pulseaudio.muted {
+ background-color: @inactive-bg-color;
+ color: @inactive-fg-color;
+}
+
+#custom-media.custom-vlc {
+ background-color: @bg-color;
+}
+
+#temperature.critical {
+ background-color: @alert-bg-color;
+}
+
+#idle_inhibitor.activated {
+ background-color: @fg-color;
+ color: @bg-color;
+}
+
+#mpd.disconnected {
+ background-color: transparent;
+ color: transparent;
+}
+
+#mpd.stopped {
+ background-color: transparent;
+ color: transparent;
+}
+
+#mpd.paused {
+ background-color: @inactive-bg-color;
+ color: @inactive-fg-color;
+}
+
diff --git a/nix/flake.lock b/nix/flake.lock
index c19e1d7..638e9be 100644
--- a/nix/flake.lock
+++ b/nix/flake.lock
@@ -19,11 +19,11 @@
"flake-compat": {
"flake": false,
"locked": {
- "lastModified": 1733328505,
- "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
+ "lastModified": 1747046372,
+ "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
- "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
+ "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
@@ -39,11 +39,11 @@
]
},
"locked": {
- "lastModified": 1747834438,
- "narHash": "sha256-AHJt79W8wADzur2htCx1U8FtEk4XjvrHb9/3iDfNedI=",
+ "lastModified": 1750304462,
+ "narHash": "sha256-Mj5t4yX05/rXnRqJkpoLZTWqgStB88Mr/fegTRqyiWc=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "6c2eb1e24cd0e76d88bdd633ef4c50d6286586e0",
+ "rev": "863842639722dd12ae9e37ca83bcb61a63b36f6c",
"type": "github"
},
"original": {
@@ -78,11 +78,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
- "lastModified": 1746453552,
- "narHash": "sha256-r66UGha+7KVHkI7ksrcMjnw/mm9Sg4l5bQlylxHwdGU=",
+ "lastModified": 1749574455,
+ "narHash": "sha256-fm2/8KPOYvvIAnNVtjDlTt/My00lIbZQ+LMrfQIWVzs=",
"owner": "nix-community",
"repo": "NixOS-WSL",
- "rev": "be618645aa0adf461f778500172b6896d5ab2d01",
+ "rev": "917af390377c573932d84b5e31dd9f2c1b5c0f09",
"type": "github"
},
"original": {
@@ -94,11 +94,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1742937945,
- "narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=",
+ "lastModified": 1749173751,
+ "narHash": "sha256-ENY3y3v6S9ZmLDDLI3LUT8MXmfXg/fSt2eA4GCnMVCE=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7",
+ "rev": "ed29f002b6d6e5e7e32590deb065c34a31dc3e91",
"type": "github"
},
"original": {
@@ -110,11 +110,11 @@
},
"nixpkgs_2": {
"locked": {
- "lastModified": 1747744144,
- "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=",
+ "lastModified": 1750134718,
+ "narHash": "sha256-v263g4GbxXv87hMXMCpjkIxd/viIF7p3JpJrwgKdNiI=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f",
+ "rev": "9e83b64f727c88a7711a2c463a7b16eedb69a84c",
"type": "github"
},
"original": {
diff --git a/nix/hosts/tux/configuration.nix b/nix/hosts/tux/configuration.nix
index 5c51264..fc09da2 100644
--- a/nix/hosts/tux/configuration.nix
+++ b/nix/hosts/tux/configuration.nix
@@ -39,7 +39,8 @@
wheelNeedsPassword = false;
};
- i3.enable = true;
+ # i3.enable = true;
+ desktop.enable = true;
kanata.enable = true;
services.flatpak.enable = true;
diff --git a/nix/modules/commonPackages.nix b/nix/modules/commonPackages.nix
index 931af8f..c058cf3 100644
--- a/nix/modules/commonPackages.nix
+++ b/nix/modules/commonPackages.nix
@@ -39,7 +39,7 @@
fzf
lune
awscli2
- deno
+ # deno
jq
nfs-utils
bluetui
diff --git a/nix/modules/default.nix b/nix/modules/default.nix
index 388c945..a5c4575 100644
--- a/nix/modules/default.nix
+++ b/nix/modules/default.nix
@@ -13,5 +13,6 @@
./pipewire.nix
./keys.nix
./rofi.nix
+ ./desktop.nix
];
}
diff --git a/nix/modules/desktop.nix b/nix/modules/desktop.nix
new file mode 100644
index 0000000..3fdf43c
--- /dev/null
+++ b/nix/modules/desktop.nix
@@ -0,0 +1,164 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}:
+
+{
+ options.desktop = {
+ enable = lib.mkEnableOption "enable desktop";
+ };
+
+ config = lib.mkIf config.desktop.enable {
+ environment.systemPackages = with pkgs; [
+ vscode-fhs
+ pavucontrol
+ vlc
+ vinegar
+ wine64
+ vesktop
+ firefox
+ brightnessctl
+ flameshot
+ jellyfin-media-player
+ anki-bin
+ mpv
+ ahk_x11
+ prismlauncher
+ feh
+ dconf
+ rofi
+ papirus-icon-theme
+ pa_applet
+ libnotify
+ adwaita-icon-theme
+ ];
+ programs.thunar.enable = true;
+ programs.hyprland.enable = true;
+ services.tumbler.enable = true;
+ # services.displayManager.ly.enable = true;
+ rofi.enable = true;
+
+ home-manager.users.luca = {
+ programs = {
+ ghostty = {
+ enable = true;
+ settings = {
+ "shell-integration-features" = "no-cursor";
+ "background-opacity" = 0.85;
+ "cursor-style" = "block";
+ "cursor-style-blink" = false;
+ "font-size" = 15;
+ };
+ };
+ waybar = {
+ enable = true;
+ systemd.enable = true;
+ };
+ };
+ xdg.configFile = {
+ "waybar".source = ../../custom/waybar;
+ };
+ services.dunst = {
+ enable = true;
+ configFile = ../../custom/dunst/dunstrc;
+ };
+ gtk = {
+ enable = true;
+ theme.name = "Adwaita-dark";
+ gtk4.extraConfig = {
+ gtk-application-prefer-dark-theme = true;
+ };
+ };
+ qt = {
+ enable = true;
+ style.name = "adwaita-dark";
+ };
+
+ wayland.windowManager.hyprland = {
+ enable = true;
+ xwayland.enable = true;
+ systemd.enable = true;
+ plugins = with pkgs; [
+ hyprlandPlugins.hy3
+ ];
+ settings = {
+ "$mod" = "SUPER";
+ "$terminal" = "ghostty";
+ "$menu" = "rofi -show drun -theme ~/.config/rofi/launcher.rasi";
+ bind = [
+ "$mod, Return, exec, $terminal"
+ "$mod SHIFT, Q, killactive"
+ "$mod SHIFT, E, exit"
+ "$mod SHIFT, SPACE, togglefloating"
+ "$mod, d, exec, $menu"
+ "$mod, h, movefocus, l"
+ "$mod, l, movefocus, r"
+ "$mod, k, movefocus, u"
+ "$mod, j, movefocus, d"
+
+ "$mod, 1, workspace, 1"
+ "$mod, 2, workspace, 2"
+ "$mod, 3, workspace, 3"
+ "$mod, 4, workspace, 4"
+ "$mod, 5, workspace, 5"
+ "$mod, 6, workspace, 6"
+ "$mod, 7, workspace, 7"
+ "$mod, 8, workspace, 8"
+ "$mod, 9, workspace, 9"
+ "$mod, 0, workspace, 10"
+ "$mod SHIFT, 1, movetoworkspace, 1"
+ "$mod SHIFT, 2, movetoworkspace, 2"
+ "$mod SHIFT, 3, movetoworkspace, 3"
+ "$mod SHIFT, 4, movetoworkspace, 4"
+ "$mod SHIFT, 5, movetoworkspace, 5"
+ "$mod SHIFT, 6, movetoworkspace, 6"
+ "$mod SHIFT, 7, movetoworkspace, 7"
+ "$mod SHIFT, 8, movetoworkspace, 8"
+ "$mod SHIFT, 9, movetoworkspace, 9"
+ "$mod SHIFT, 0, movetoworkspace, 10"
+ ];
+ bindm = [
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizewindow"
+ ];
+ bindel = [
+ ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
+ ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
+ ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
+ ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
+ ",XF86MonBrightnessUp, exec, bash -c 'brightnessctl s +5% && perc=$(( \$(brightnessctl get) * 100 / \$(brightnessctl max) )) && notify-send \"Brightness\" -h int:value:\$perc'"
+ ",XF86MonBrightnessDown, exec, bash -c 'brightnessctl s 5%- && perc=$(( \$(brightnessctl get) * 100 / \$(brightnessctl max) )) && notify-send \"Brightness\" -h int:value:\$perc'"
+ ];
+ general = {
+ gaps_in = 0;
+ gaps_out = 0;
+ };
+ decoration = {
+ rounding = 0;
+ blur = {
+ enabled = false;
+ };
+ };
+ env = [
+ "XCURSOR_THEME, Adwaita"
+ "XCURSOR_SIZE,24"
+ ];
+ monitor = [
+ "eDP-1, 1920x1080, 0x0, 1"
+ ];
+ input = {
+ kb_layout = "us";
+ touchpad = {
+ natural_scroll = true;
+ };
+ };
+ animations = {
+ enabled = false;
+ };
+ };
+ };
+ };
+ };
+}