diff --git a/assets/wallpaper_street.jpg b/assets/wallpaper_street.jpg
new file mode 100644
index 0000000..e0a3053
Binary files /dev/null and b/assets/wallpaper_street.jpg differ
diff --git a/flake.nix b/flake.nix
index e566ee5..211b267 100644
--- a/flake.nix
+++ b/flake.nix
@@ -10,6 +10,8 @@
};
hyprland.url = "github:hyprwm/Hyprland"; # packages hyprland
+
+# stylix.url = "github:danth/stylix";
};
outputs = attrs @ { self, nixpkgs, home-manager, hyprland, ... }: {
diff --git a/home/gtk.nix b/home/gtk.nix
index 245825d..f8e4879 100644
--- a/home/gtk.nix
+++ b/home/gtk.nix
@@ -13,6 +13,11 @@
gtk-xft-rgba = "rgb";
gtk-recent-files-enable = false;
};
+ gtk4.extraConfig = {
+ Settings = ''
+ gtk-application-prefer-dark-theme=1
+ '';
+ };
iconTheme = {
package = pkgs.fluent-icon-theme;
name = "Fluent-dark";
diff --git a/home/hyprland.nix b/home/hyprland.nix
index 4aaa4e1..99212af 100644
--- a/home/hyprland.nix
+++ b/home/hyprland.nix
@@ -8,12 +8,16 @@ in {
env = XDG_SESSION_DESKTOP,hyprland
env = GDK_BACKEND,wayland
env = QT_QPA_PLATFORM,wayland
+
+ monitor=eDP-1,1920x1080@60.096001,0x0,1
general {
- gaps_in = 1
- gaps_out = 1
- border_size = 1
- layout = master
+ gaps_in = 0
+ gaps_out = -1
+ border_size = 0
+ col.active_border = rgba(002B36ee) 45deg
+ col.inactive_border = rgba(07364299)
+ layout = dwindle
}
input {
@@ -30,17 +34,69 @@ in {
repeat_delay = 300
}
+ decoration {
+ rounding = 10
+ blur = yes
+ blur_size = 3
+ blur_passes = 1
+ blur_new_optimizations = on
+ drop_shadow = yes
+ shadow_range = 4
+ col.shadow = rgba(1a1a1aee)
+ }
+
+# animations {
+# enabled = true
+# bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+# animation = windows, 1, 7, myBezier
+# animation = windowsOut, 1, 7, default, popin 80%
+# animation = workspace, 1, 6, default
+# animation = border, 1, 10, default
+# animation = borderangle, 1, 8, default
+# animation = fade, 1, 7, default
+# }
+
+ dwindle {
+ preserve_split = yes
+ pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+
+ }
+
master {
- new_is_master = no
- new_on_top = no
- mfact = 0.65
- special_scale_factor = 1
+ new_is_master = true
+ }
+
+ misc {
+ disable_hyprland_logo = true
+ disable_splash_rendering = true
}
exec-once = waybar
+ exec-once = sleep 0.1; swww init && swww img ${../assets/wallpaper_street.jpg}
+
+ $SUPER = ${modifier}
+ $SUPER_SHIFT = ${modifier}_SHIFT
+ $SUPER_ALT = ${modifier}_ALT
+
+ bind = $SUPER, Q, killactive
+ bind = $SUPER, T, exec, kitty
+ bind = $SUPER, B, exec, librewolf
+ bind = $SUPER, F, fullscreen,1
+ bind = $SUPER_SHIFT, F, fullscreen,0
+ bind = $SUPER_SHIFT, H, splitratio, -0.05
+ bind = $SUPER_SHIFT, L, splitratio, +0.05
+# bind = $SUPER, V, togglesplit,
+
+ # Move/resize windows with super + LMB/RMB and dragging
+ bindm = $SUPER, mouse:272, movewindow
+ bindm = $SUPER, mouse:273, resizewindow
+
+# # Change volume with keys
+# bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && notify-send -t 2000 "Muted" "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
+# bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ && notify-send -t 2000 "Raised volume to" "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | tail -c 3)%"
+# bindl=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- && notify-send -t 2000 "Lowered volume to" "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | tail -c 3)%"
+# bindl=, XF86MonBrightnessDown, exec, brightnessctl set 5%- && notify-send -t 2000 "Decreased brightness to" "$(brightnessctl get)"
+# bindl=, XF86MonBrightnessUp, exec, brightnessctl set +5% && notify-send -t 2000 "Increased brightness to" "$(brightnessctl get)"
- $SUPER = ${modifier};
- bind = $SUPER, Q, exec, kitty
- bind = $SUPER, F, exec, librewolf
'';
}
diff --git a/home/kitty.nix b/home/kitty.nix
index e974bd0..fd61ca9 100644
--- a/home/kitty.nix
+++ b/home/kitty.nix
@@ -1,5 +1,20 @@
{
programs.kitty = {
enable = true;
+ settings = {
+ enable_audio_bell = false;
+ close_on_child_death = true;
+ cursor_blink_interval = 0;
+
+ open_url_with = "librewolf";
+ wayland_titlebar_color = "background";
+
+ allow_remote_control = true;
+ listen_on = "unix:/tmp/kitty";
+ dynamic_background_opacity = true;
+
+ window_padding_width = 5;
+ tab_bar_margin_width = 5;
+ };
};
}
diff --git a/home/waybar.nix b/home/waybar.nix
index 693a4e1..0901774 100644
--- a/home/waybar.nix
+++ b/home/waybar.nix
@@ -4,390 +4,212 @@
{
"layer": "top",
"position": "top",
- "mod": "dock",
+ "height": 20,
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
- "height": 0,
"modules-left": [
- "clock",
- "custom/weather",
- "wlr/workspaces"
+ "temperature",
+ "cpu",
+ "memory"
],
"modules-center": ["hyprland/window"],
"modules-right": [
- "tray",
- "custom/updates",
- "custom/language",
"battery",
- "backlight",
- "pulseaudio",
- "pulseaudio#microphone"
+ "clock"
],
"hyprland/window": {
"format": "{}"
},
- "wlr/workspaces": {
- "disable-scroll": true,
- "all-outputs": true,
- "on-click": "activate",
- //"format": "{icon}",
- "persistent_workspaces": {
- "1": [],
- "2": [],
- "3": [],
- "4": [],
- "5": [],
- "6": [],
- "7": [],
- "8": [],
- "9": [],
- "10": []
- }
- },
- "custom/updates": {
- "format": " {}",
- "interval": 7200, // every two hours
- "exec": "i=$(checkupdates); echo \"$i\" |wc -l; echo \"$i\" |column -t |tr '\n' '\r'", // # of updates and tooltip details
- "exec-if": "exit 0", // always run; consider advanced run conditions
- "on-click": "kitty -e sudo pacman -Syu", // update system
- "signal": 8
- },
- "custom/weather" : {
- "tooltip" : true,
- "format" : "{}",
- "interval" : 30,
- "exec" : "~/.config/waybar/waybar-wttr.py",
- "return-type" : "json"
- },
- "tray": {
- "icon-size": 13,
- "spacing": 10
- },
"clock": {
- "format": "{: %R %d/%m}",
- "tooltip-format": "{:%Y %B}\n{calendar}"
+ "format": "{:%H:%M}",
+ "format-alt": "{:%b %d %Y}",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
},
- "backlight": {
- "device": "intel_backlight",
- "format": "{icon} {percent}%",
- "format-icons": ["", "", ""],
- "on-scroll-up": "brightnessctl set 1%+",
- "on-scroll-down": "brightnessctl set 1%-",
- "min-length": 6
+ "cpu": {
+ "interval": 10,
+ "format": " {}%",
+ "max-length": 10,
+ "on-click": "",
+ },
+ "memory": {
+ "interval": 30,
+ "format": " {}%",
+ "format-alt":" {used:0.1f}GB",
+ "max-length": 10,
+ },
+ "temperature": {
+ "interval": 10,
+ "format": " {temperatureC}°C",
+ "format-alt":"temprature",
+ "max-length": 10,
},
"battery": {
- "states": {
- "good": 95,
- "warning": 30,
- "critical": 20
- },
- "format": "{icon} {capacity}%",
- "format-charging": " {capacity}%",
- "format-plugged": " {capacity}%",
- "format-alt": "{time} {icon}",
- "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
+ "bat": "BAT0",
+ "adapter": "ADP0",
+ "interval": 60,
+ "states": {
+ "warning": 30,
+ "critical": 15
+ },
+ "max-length": 20,
+ "format": "{icon}",
+ "format-warning": "{icon}",
+ "format-critical": "{icon}",
+ "format-charging": "",
+ "format-plugged": "",
+ "format-notcharging": "",
+ "format-alt": "{icon} {time}",
+ "format-full": "",
+ "format-icons": ["", "", ""]
},
- "pulseaudio": {
- "format": "{icon} {volume}%",
- "tooltip": false,
- "format-muted": " Muted",
- "on-click": "pamixer -t",
- "on-scroll-up": "pamixer -i 5",
- "on-scroll-down": "pamixer -d 5",
- "scroll-step": 5,
- "format-icons": {
- "headphone": "",
- "hands-free": "",
- "headset": "",
- "phone": "",
- "portable": "",
- "car": "",
- "default": ["", "", ""]
- }
- },
- "pulseaudio#microphone": {
- "format": "{format_source}",
- "format-source": " {volume}%",
- "format-source-muted": " Muted",
- "on-click": "pamixer --default-source -t",
- "on-scroll-up": "pamixer --default-source -i 5",
- "on-scroll-down": "pamixer --default-source -d 5",
- "scroll-step": 5
- }
}
'';
xdg.configFile."waybar/style.css".text = /* css */ ''
* {
- border: none;
- border-radius: 0;
- font-family: Cartograph CF Nerd Font, monospace;
- font-weight: bold;
- font-size: 14px;
- min-height: 0;
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: Material Design Icons, JetBrainsMono Nerd Font, Iosevka Nerd Font;
+ font-size: 12px;
+ border: none;
+ border-radius: 0;
+ min-height: 0;
}
window#waybar {
- background: rgba(21, 18, 27, 0);
- color: #cdd6f4;
+ background-color: rgba(26, 27, 38, 0.5);
+ color: #ffffff;
+ transition-property: background-color;
+ transition-duration: 0.5s;
}
-tooltip {
- background: #1e1e2e;
- border-radius: 10px;
- border-width: 2px;
- border-style: solid;
- border-color: #11111b;
-}
-
-#workspaces button {
- padding: 5px;
- color: #313244;
- margin-right: 5px;
-}
-
-#workspaces button.active {
- color: #a6adc8;
-}
-
-#workspaces button.focused {
- color: #a6adc8;
- background: #eba0ac;
- border-radius: 10px;
-}
-
-#workspaces button.urgent {
- color: #11111b;
- background: #a6e3a1;
- border-radius: 10px;
-}
-
-#workspaces button:hover {
- background: #11111b;
- color: #cdd6f4;
- border-radius: 10px;
-}
-
-#custom-language,
-#custom-updates,
-#custom-caffeine,
-#custom-weather,
-#window,
-#clock,
-#battery,
-#pulseaudio,
-#network,
-#workspaces,
-#tray,
-#backlight {
- background: #1e1e2e;
- padding: 0px 10px;
- margin: 3px 0px;
- margin-top: 10px;
- border: 1px solid #181825;
-}
-
-#tray {
- border-radius: 10px;
- margin-right: 10px;
-}
-
-#workspaces {
- background: #1e1e2e;
- border-radius: 10px;
- margin-left: 10px;
- padding-right: 0px;
- padding-left: 5px;
-}
-
-#custom-caffeine {
- color: #89dceb;
- border-radius: 10px 0px 0px 10px;
- border-right: 0px;
- margin-left: 10px;
-}
-
-#custom-language {
- color: #f38ba8;
- border-left: 0px;
- border-right: 0px;
-}
-
-#custom-updates {
- color: #f5c2e7;
- border-radius: 10px 0px 0px 10px;
- border-left: 0px;
- border-right: 0px;
+window#waybar.hidden {
+ opacity: 0.1;
}
#window {
- border-radius: 10px;
- margin-left: 60px;
- margin-right: 60px;
+ color: #64727d;
}
-#clock {
- color: #fab387;
- border-radius: 10px 0px 0px 10px;
- margin-left: 5px;
- border-right: 0px;
+#clock,
+#temperature,
+#mpris,
+#cpu,
+#memory {
+ color: #e5e5e5;
+ border-radius: 6px;
+ padding: 2px 10px;
+ background-color: #252733;
+ border-radius: 8px;
+ font-size: 16px;
+
+ margin-left: 4px;
+ margin-right: 4px;
+
+ margin-top: 8.5px;
+ margin-bottom: 8.5px;
+}
+#temperature{
+ color: #7a95c9;
+}
+#cpu {
+ color: #fb958b;
}
-#network {
- color: #f9e2af;
- border-left: 0px;
- border-right: 0px;
-}
-
-#pulseaudio {
- color: #89b4fa;
- border-left: 0px;
- border-right: 0px;
-}
-
-#pulseaudio.microphone {
- color: #cba6f7;
- border-radius: 0px 10px 10px 0px;
- border-left: 0px;
- border-right: 0px;
- margin-right: 5px;
+#memory {
+ color: #a1c999;
}
#battery {
- color: #a6e3a1;
- border-radius: 0 10px 10px 0;
- margin-right: 10px;
- border-left: 0px;
+ background-color: #252733;
+ padding: 0em 2em;
+
+ font-size: 14px;
+
+ padding-left: 7.5px;
+ padding-right: 7.5px;
+
+ padding-top: 3px;
+ padding-bottom: 3px;
+
+ margin-top: 7px;
+ margin-bottom: 7px;
+
+ font-size: 20px;
}
-#custom-weather {
- border-radius: 0px 10px 10px 0px;
- border-right: 0px;
- margin-left: 0px;
+#battery {
+ color: #8fbcbb;
+ border-radius: 0px 8px 8px 0px;
+ padding-right: 2px;
+ font-size: 16px;
+}
+
+#battery.critical,
+#battery.warning,
+#battery.full,
+#battery.plugged {
+ color: #8fbcbb;
+ padding-left: 6px;
+ padding-right: 12px;
+ font-size: 16px;
+}
+
+#battery.charging {
+ font-size: 18px;
+ padding-right: 13px;
+ padding-left: 4px;
+}
+
+#battery.full,
+#battery.plugged {
+ font-size: 22.5px;
+ padding-right: 10px;
+}
+
+@keyframes blink {
+ to {
+ background-color: rgba(30, 34, 42, 0.5);
+ color: #abb2bf;
+ }
+}
+
+#battery.warning {
+ color: #ecd3a0;
+}
+
+#battery.critical:not(.charging) {
+ color: #fb958b;
+}
+
+#clock {
+ color: #8a909e;
+ font-weight: bold;
+ margin-top: 7px;
+ margin-bottom: 7px;
+}
+
+tooltip {
+ font-family: Iosevka Nerd Font;
+ border-radius: 15px;
+ padding: 15px;
+ background-color: #1f232b;
+}
+
+tooltip label {
+ font-family: Iosevka Nerd Font;
+ padding: 5px;
+}
+
+label:focus {
+ background-color: #1f232b;
+}
+
+#custom-wallpaper {
+ color: #dbd9d8;
+ padding-right: 5;
+ padding-left: 0;
}
- '';
- xdg.configFile."waybar/waybar-wttr.py".text = /* python */ ''
-#!/usr/bin/env python
-
-import json
-import requests
-from datetime import datetime
-
-WEATHER_CODES = {
- '113': '☀️ ',
- '116': '⛅ ',
- '119': '☁️ ',
- '122': '☁️ ',
- '143': '☁️ ',
- '176': '🌧️',
- '179': '🌧️',
- '182': '🌧️',
- '185': '🌧️',
- '200': '⛈️ ',
- '227': '🌨️',
- '230': '🌨️',
- '248': '☁️ ',
- '260': '☁️ ',
- '263': '🌧️',
- '266': '🌧️',
- '281': '🌧️',
- '284': '🌧️',
- '293': '🌧️',
- '296': '🌧️',
- '299': '🌧️',
- '302': '🌧️',
- '305': '🌧️',
- '308': '🌧️',
- '311': '🌧️',
- '314': '🌧️',
- '317': '🌧️',
- '320': '🌨️',
- '323': '🌨️',
- '326': '🌨️',
- '329': '❄️ ',
- '332': '❄️ ',
- '335': '❄️ ',
- '338': '❄️ ',
- '350': '🌧️',
- '353': '🌧️',
- '356': '🌧️',
- '359': '🌧️',
- '362': '🌧️',
- '365': '🌧️',
- '368': '🌧️',
- '371': '❄️',
- '374': '🌨️',
- '377': '🌨️',
- '386': '🌨️',
- '389': '🌨️',
- '392': '🌧️',
- '395': '❄️ '
-}
-
-data = {}
-
-
-weather = requests.get("https://wttr.in/?format=j1").json()
-
-
-def format_time(time):
- return time.replace("00", "").zfill(2)
-
-
-def format_temp(temp):
- return (hour['FeelsLikeF']+"°").ljust(3)
-
-
-def format_chances(hour):
- chances = {
- "chanceoffog": "Fog",
- "chanceoffrost": "Frost",
- "chanceofovercast": "Overcast",
- "chanceofrain": "Rain",
- "chanceofsnow": "Snow",
- "chanceofsunshine": "Sunshine",
- "chanceofthunder": "Thunder",
- "chanceofwindy": "Wind"
- }
-
- conditions = []
- for event in chances.keys():
- if int(hour[event]) > 0:
- conditions.append(chances[event]+" "+hour[event]+"%")
- return ", ".join(conditions)
-
-tempint = int(weather['current_condition'][0]['FeelsLikeF'])
-extrachar = ""
-if tempint > 0 and tempint < 10:
- extrachar = '+'
-
-
-data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \
- " "+extrachar+weather['current_condition'][0]['FeelsLikeF']+"°"
-
-data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°\n"
-data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n"
-data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n"
-data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n"
-for i, day in enumerate(weather['weather']):
- data['tooltip'] += f"\n"
- if i == 0:
- data['tooltip'] += "Today, "
- if i == 1:
- data['tooltip'] += "Tomorrow, "
- data['tooltip'] += f"{day['date']}\n"
- data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° "
- data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n"
- for hour in day['hourly']:
- if i == 0:
- if int(format_time(hour['time'])) < datetime.now().hour-2:
- continue
- data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
-
-
-print(json.dumps(data))
-
'';
}
diff --git a/modules/default.nix b/modules/default.nix
index 7a8f1e9..e9ab8be 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -2,6 +2,7 @@
imports = [
./boot.nix
./fonts.nix
+ ./greetd.nix
./home-manager.nix
./locale.nix
./hyprland.nix
diff --git a/modules/fonts.nix b/modules/fonts.nix
index 255e59b..438dc9a 100644
--- a/modules/fonts.nix
+++ b/modules/fonts.nix
@@ -18,9 +18,9 @@
fontconfig = {
defaultFonts = {
- serif = [ "Noto Serif CJK JP" "Noto Serif" ];
- sansSerif = [ "Noto Sans CJK JP" "Noto Sans" ];
- monospace = [ "Noto Mono CJK JP" "Noto Mono" ];
+ serif = [ "Noto Serif" ];
+ sansSerif = [ "Noto Sans" ];
+ monospace = [ "Noto Mono" ];
};
allowBitmaps = false;
diff --git a/modules/greetd.nix b/modules/greetd.nix
new file mode 100644
index 0000000..e4edc6a
--- /dev/null
+++ b/modules/greetd.nix
@@ -0,0 +1,21 @@
+{ pkgs, ... }:
+
+{
+ services.greetd = {
+ enable = true;
+ restart = false;
+
+ settings = {
+ default_session = {
+ command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
+ user = "greeter";
+ };
+
+ initial_session = {
+ command = "${pkgs.hyprland}/bin/Hyprland";
+ user = "stefan";
+ };
+ };
+ };
+}
+
diff --git a/modules/packages.nix b/modules/packages.nix
index 6a48dd6..07c4f27 100644
--- a/modules/packages.nix
+++ b/modules/packages.nix
@@ -1,8 +1,11 @@
{ config, pkgs, ... }: {
environment.systemPackages = with pkgs; [
+ brightnessctl
git
neofetch
+ swww
tree
wget
+ wl-clipboard
];
}
diff --git a/modules/stylix.nix b/modules/stylix.nix
new file mode 100644
index 0000000..5d0fb42
--- /dev/null
+++ b/modules/stylix.nix
@@ -0,0 +1,46 @@
+{ pkgs, ... }:
+
+let
+ theme = "monokai";
+ opacity = 0.95;
+ font-size = 11;
+in
+{
+ stylix.image = ../assets/wallpaper.png;
+ stylix.polarity = "dark";
+ stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/${theme}.yaml";
+
+ stylix.opacity = {
+ terminal = opacity;
+ popups = opacity;
+ };
+
+ stylix.fonts = {
+ serif = {
+ package = pkgs.noto-fonts-cjk-sans;
+ name = "Noto Sans CJK JP";
+ };
+
+ sansSerif = {
+ package = pkgs.noto-fonts-cjk-sans;
+ name = "Noto Sans CJK JP";
+ };
+
+ monospace = {
+ package = pkgs.maple-mono;
+ name = "Maple Mono";
+ };
+
+ emoji = {
+ package = pkgs.noto-fonts-emoji;
+ name = "Noto Color Emoji";
+ };
+
+ sizes = {
+ applications = font-size;
+ desktop = font-size;
+ popups = font-size;
+ terminal = font-size;
+ };
+ };
+}