diff --git a/common.nix b/common.nix
new file mode 100644
index 0000000..203de02
--- /dev/null
+++ b/common.nix
@@ -0,0 +1,23 @@
+rec {
+ keymaps = {
+ layout = "gb,no";
+ options = "grp:alt_shift_toggle"; # Toggle using ALT + SHIFT
+ };
+
+ username = "martin";
+ hostname = "nixos";
+
+ dir = {
+ home = "/home/${username}";
+ pictures = "${dir.home}/Pictures";
+ };
+
+ # This value determines the NixOS release from which the default
+ # settings for stateful data, like file locations and database versions
+ # on your system were taken. It‘s perfectly fine and recommended to leave
+ # this value at the release version of the first install of this system.
+ # Before changing this value read the documentation for this option
+ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
+ system.version = "24.11";
+ terminal = "kitty";
+}
diff --git a/configuration.nix b/configuration.nix
index fafd928..6cb70bb 100644
--- a/configuration.nix
+++ b/configuration.nix
@@ -1,26 +1,26 @@
-# Edit this configuration file to define what should be installed on
-# your system. Help is available in the configuration.nix(5) man page
-# and in the NixOS manual (accessible by running ‘nixos-help’).
-
{
pkgs,
outputs,
...
}:
-
+let
+ common = import ./common.nix;
+in
{
imports = [ ./modules ];
nixpkgs.overlays = [ outputs.overlays.unstable-packages ];
# Bootloader.
- boot.loader.systemd-boot.enable = true;
- boot.loader.efi.canTouchEfiVariables = true;
+ boot.loader = {
+ systemd-boot.enable = true;
+ efi.canTouchEfiVariables = true;
+ };
# Define a user account. Don't forget to set a password with ‘passwd’.
- users.users.martin = {
+ users.users.${common.username} = {
isNormalUser = true;
- description = "martin";
+ description = common.username;
extraGroups = [
"networkmanager"
"wheel"
@@ -42,9 +42,6 @@
xdg-utils
xdg-desktop-portal
xdg-desktop-portal-gtk
- kdePackages.qtwayland
- kdePackages.qtsvg
- kdePackages.qt6ct
protonmail-desktop
stremio
fastfetch
@@ -63,31 +60,12 @@
"flakes"
];
- # Some programs need SUID wrappers, can be configured further or are
- # started in user sessions.
- # programs.mtr.enable = true;
-
- programs = {
- kdeconnect.enable = true;
- };
-
- # List services that you want to enable:
-
- # Enable the OpenSSH daemon.
- # services.openssh.enable = true;
+ programs.kdeconnect.enable = true;
services = {
flatpak.enable = true;
xserver.enable = true;
};
- qt.enable = true;
-
- # This value determines the NixOS release from which the default
- # settings for stateful data, like file locations and database versions
- # on your system were taken. It‘s perfectly fine and recommended to leave
- # this value at the release version of the first install of this system.
- # Before changing this value read the documentation for this option
- # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
- system.stateVersion = "24.11"; # Did you read the comment?
+ system.stateVersion = common.system.version;
}
diff --git a/home-manager/default.nix b/home-manager/default.nix
index 5d26d24..947b084 100644
--- a/home-manager/default.nix
+++ b/home-manager/default.nix
@@ -4,7 +4,8 @@
...
}:
let
- username = "martin";
+ common = import ../common.nix;
+ username = common.username;
homeDir = "/home/${username}";
in
{
@@ -31,7 +32,7 @@ in
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
- stateVersion = "24.11";
+ stateVersion = common.system.version;
};
programs = {
diff --git a/home-manager/hyprland/binds.nix b/home-manager/hyprland/binds.nix
index dd57448..dcdabb9 100644
--- a/home-manager/hyprland/binds.nix
+++ b/home-manager/hyprland/binds.nix
@@ -16,11 +16,6 @@
"$mainMod, L, exec, hyprlock"
"$mainMod, K, exec, [float] gnome-calculator"
- # Screenshots
- "$mainMod, PRINT, exec, hyprshot -m window" # Window
- ", PRINT, exec, hyprshot -m output" # Monitor
- "$shiftMod, PRINT, exec, hyprshot -m region" # Region
-
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
diff --git a/home-manager/hyprland/default.nix b/home-manager/hyprland/default.nix
index 4dd1277..a0a1369 100644
--- a/home-manager/hyprland/default.nix
+++ b/home-manager/hyprland/default.nix
@@ -6,6 +6,7 @@
./waybar
./hypridle
./hyprlock
+ ./hyprshot.nix
./settings.nix
./swaync
];
diff --git a/home-manager/hyprland/hyprcursor/default.nix b/home-manager/hyprland/hyprcursor/default.nix
index c316031..c560b03 100644
--- a/home-manager/hyprland/hyprcursor/default.nix
+++ b/home-manager/hyprland/hyprcursor/default.nix
@@ -1,5 +1,9 @@
{ pkgs, ... }:
-
+let
+ cursorSize = 24;
+ cursorTheme = "rose-pine-hyprcursor";
+ cursorDir = "hyprcursors";
+in
{
home = {
packages = with pkgs; [
@@ -7,12 +11,23 @@
];
file = {
- ".local/share/icons/rose-pine-hyprcursor/manifest.hl".source = ./manifest.hl;
- ".local/share/icons/rose-pine-hyprcursor/hyprcursors" = {
- source = ./hyprcursors;
+ ".local/share/icons/${cursorTheme}/manifest.hl".text = ''
+ name = ${cursorTheme}
+ description = BreezeX remixed with Rose Pine remixed to Hyprcursor format
+ version = 0.3.2
+ cursors_directory = ${cursorDir}
+ '';
+ ".local/share/icons/${cursorTheme}/${cursorDir}" = {
+ source = ./${cursorDir};
recursive = true;
};
};
+
+ sessionVariables = {
+ XCURSOR_SIZE = cursorSize;
+ HYPRCURSOR_SIZE = cursorSize;
+ HYPRCURSOR_THEME = cursorSize;
+ };
};
wayland.windowManager.hyprland.settings.exec-once = [
diff --git a/home-manager/hyprland/hyprcursor/manifest.hl b/home-manager/hyprland/hyprcursor/manifest.hl
deleted file mode 100644
index 99cc530..0000000
--- a/home-manager/hyprland/hyprcursor/manifest.hl
+++ /dev/null
@@ -1,4 +0,0 @@
-name = rose-pine-hyprcursor
-description = BreezeX remixed with Rose Pine remixed to Hyprcursor format
-version = 0.3.2
-cursors_directory = hyprcursors
diff --git a/home-manager/hyprland/hypridle/default.nix b/home-manager/hyprland/hypridle/default.nix
index 6f71dfa..aa9b4fe 100644
--- a/home-manager/hyprland/hypridle/default.nix
+++ b/home-manager/hyprland/hypridle/default.nix
@@ -1,4 +1,3 @@
-{ ... }:
let
# Time in seconds
lockAfter = 1200;
diff --git a/home-manager/hyprland/hyprlock/default.nix b/home-manager/hyprland/hyprlock/default.nix
index 061e0aa..4fc85b1 100644
--- a/home-manager/hyprland/hyprlock/default.nix
+++ b/home-manager/hyprland/hyprlock/default.nix
@@ -1,20 +1,12 @@
{ lib, ... }:
-
+let
+ theme = import ../../../theme.nix;
+in
{
programs.hyprlock = {
enable = true;
settings = {
- "$base" = "rgb(1e1e2e)";
- "$text" = "rgb(cdd6f4)";
- "$textAlpha" = "cdd6f4";
- "$mauve" = "rgb(cba6f7)";
- "$mauveAlpha" = "cba6f7";
- "$red" = "rgb(f38ba8)";
- "$yellow" = "rgb(f9e2af)";
- "$accent" = "$mauve";
- "$accentAlpha" = "$mauveAlpha";
- "$surface0" = "rgb(313244)";
- "$font" = "JetBrainsMono Nerd Font";
+ "$font" = "${theme.nerdFont} Nerd Font";
# GENERAL
general = {
@@ -26,29 +18,27 @@
label = [
{
text = "$LAYOUT";
- color = "$text";
+ color = "${theme.textRgb}";
font_size = 25;
font_family = "$font";
position = "30, -30";
halign = "left";
valign = "top";
}
-
# TIME
{
text = "$TIME";
- color = "$text";
+ color = "${theme.textRgb}";
font_size = 90;
font_family = "$font";
position = "-30, 0";
halign = "right";
valign = "top";
}
-
# DATE
{
text = "cmd[update:43200000] date +\"%A, %d %B %Y\"";
- color = "$text";
+ color = "${theme.textRgb}";
font_size = 25;
font_family = "$font";
position = "-30, -150";
@@ -56,7 +46,6 @@
valign = "top";
}
];
-
# INPUT FIELD
input-field = {
size = "300, 60";
@@ -64,17 +53,17 @@
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
- outer_color = lib.mkDefault "$accent";
- inner_color = lib.mkDefault "$surface0";
- font_color = lib.mkDefault "$text";
+ outer_color = lib.mkDefault "${theme.mauve}";
+ inner_color = lib.mkDefault "${theme.surface0Rgb}";
+ font_color = lib.mkDefault "${theme.textRgb}";
fade_on_empty = false;
- placeholder_text = " Logged in as $USER";
+ placeholder_text = " Logged in as $USER";
hide_input = false;
- check_color = lib.mkDefault "$accent";
- fail_color = lib.mkDefault "$red";
+ check_color = lib.mkDefault "${theme.mauve}";
+ fail_color = lib.mkDefault "${theme.redRgb}";
fail_text = "$FAIL ($ATTEMPTS)";
- capslock_color = lib.mkDefault "$yellow";
- position = "0, -20%";
+ capslock_color = lib.mkDefault "${theme.yellowRgb}";
+ position = "0, -200"; # TODO change -200 to -20% at 25.05
halign = "center";
valign = "center";
};
diff --git a/home-manager/hyprland/hyprshot.nix b/home-manager/hyprland/hyprshot.nix
new file mode 100644
index 0000000..5074cd2
--- /dev/null
+++ b/home-manager/hyprland/hyprshot.nix
@@ -0,0 +1,19 @@
+let
+ common = import ../../common.nix;
+in
+{
+ home.sessionVariables = {
+ HYPRSHOT_DIR = "${common.dir.pictures}/screenshots"; # Store screenshots here
+ };
+
+ wayland.windowManager.hyprland.settings = {
+ "$mainMod" = "SUPER";
+ "$shiftMod" = "$mainMod SHIFT";
+
+ bind = [
+ "$mainMod, PRINT, exec, hyprshot -m window" # Window
+ ", PRINT, exec, hyprshot -m output" # Monitor
+ "$shiftMod, PRINT, exec, hyprshot -m region" # Region
+ ];
+ };
+}
diff --git a/home-manager/hyprland/settings.nix b/home-manager/hyprland/settings.nix
index 1143f6e..4cf1998 100644
--- a/home-manager/hyprland/settings.nix
+++ b/home-manager/hyprland/settings.nix
@@ -1,5 +1,8 @@
{ lib, ... }:
-
+let
+ common = import ../../common.nix;
+ theme = import ../../theme.nix;
+in
{
wayland.windowManager.hyprland.settings = {
monitor = [
@@ -25,98 +28,15 @@
];
env = [
- "XCURSOR_SIZE,24"
- "HYPRCURSOR_SIZE,24"
- "HYPRCURSOR_THEME,rose-pine-hyprcursor"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
- "HYPRSHOT_DIR,$HOME/Pictures/screenshots" # Store screenshots here
];
- # TODO move to common file
- "$rosewater" = "rgb(f5e0dc)";
- "$rosewaterAlpha" = "f5e0dc";
-
- "$flamingo" = "rgb(f2cdcd)";
- "$flamingoAlpha" = "f2cdcd";
-
- "$pink" = "rgb(f5c2e7)";
- "$pinkAlpha" = "f5c2e7";
-
- "$mauve" = "rgb(cba6f7)";
- "$mauveAlpha" = "cba6f7";
-
- "$red" = "rgb(f38ba8)";
- "$redAlpha" = "f38ba8";
-
- "$maroon" = "rgb(eba0ac)";
- "$maroonAlpha" = "eba0ac";
-
- "$peach" = "rgb(fab387)";
- "$peachAlpha" = "fab387";
-
- "$yellow" = "rgb(f9e2af)";
- "$yellowAlpha" = "f9e2af";
-
- "$green" = "rgb(a6e3a1)";
- "$greenAlpha" = "a6e3a1";
-
- "$teal" = "rgb(94e2d5)";
- "$tealAlpha" = "94e2d5";
-
- "$sky" = "rgb(89dceb)";
- "$skyAlpha" = "89dceb";
-
- "$sapphire" = "rgb(74c7ec)";
- "$sapphireAlpha" = "74c7ec";
-
- "$blue" = "rgb(89b4fa)";
- "$blueAlpha" = "89b4fa";
-
- "$lavender" = "rgb(b4befe)";
- "$lavenderAlpha" = "b4befe";
-
- "$text" = "rgb(cdd6f4)";
- "$textAlpha" = "cdd6f4";
-
- "$subtext1" = "rgb(bac2de)";
- "$subtext1Alpha" = "bac2de";
-
- "$subtext0" = "rgb(a6adc8)";
- "$subtext0Alpha" = "a6adc8";
-
- "$overlay2" = "rgb(9399b2)";
- "$overlay2Alpha" = "9399b2";
-
- "$overlay1" = "rgb(7f849c)";
- "$overlay1Alpha" = "7f849c";
-
- "$overlay0" = "rgb(6c7086)";
- "$overlay0Alpha" = "6c7086";
-
- "$surface2" = "rgb(585b70)";
- "$surface2Alpha" = "585b70";
-
- "$surface1" = "rgb(45475a)";
- "$surface1Alpha" = "45475a";
-
- "$surface0" = "rgb(313244)";
- "$surface0Alpha" = "313244";
-
- "$base" = "rgb(1e1e2e)";
- "$baseAlpha" = "1e1e2e";
-
- "$mantle" = "rgb(181825)";
- "$mantleAlpha" = "181825";
-
- "$crust" = "rgb(11111b)";
- "$crustAlpha" = "11111b";
-
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 2;
- "col.active_border" = lib.mkDefault "$mauve $teal 45deg";
- "col.inactive_border" = lib.mkDefault "rgba(595959aa)";
+ "col.active_border" = lib.mkDefault "${theme.mauveRgb} ${theme.tealRgb} 45deg";
+ "col.inactive_border" = lib.mkDefault "rgba(${theme.surface2Alpha}aa)";
resize_on_border = true;
allow_tearing = false;
layout = "dwindle";
@@ -133,7 +53,7 @@
enabled = true;
range = 4;
render_power = 3;
- color = lib.mkDefault "$base";
+ color = lib.mkDefault theme.baseRgb;
};
blur = {
@@ -192,10 +112,9 @@
debug.disable_logs = false;
- # TODO fetch values from common file. Must match configs in nixos!
input = {
- kb_layout = "gb,no";
- kb_options = "grp:alt_shift_toggle";
+ kb_layout = common.keymaps.layout;
+ kb_options = common.keymaps.options;
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
touchpad.natural_scroll = false;
diff --git a/home-manager/hyprland/swaync/default.nix b/home-manager/hyprland/swaync/default.nix
index e168de7..140703a 100644
--- a/home-manager/hyprland/swaync/default.nix
+++ b/home-manager/hyprland/swaync/default.nix
@@ -1,8 +1,464 @@
-{ pkgs, lib, ... }:
-
+{ lib, ... }:
+let
+ theme = import ../../../theme.nix;
+in
{
+ # TODO inject font
services.swaync = {
enable = true;
- style = lib.mkDefault ./mocha.css;
+ style = lib.mkDefault ''
+ * {
+ all: unset;
+ font-size: 14px;
+ font-family: "JetBrains Mono", monospace;
+ transition: 200ms;
+ }
+
+ trough highlight {
+ background: #${theme.textAlpha};
+ }
+
+ scale trough {
+ margin: 0 1rem;
+ background-color: #${theme.surface0Alpha};
+ min-height: 8px;
+ min-width: 70px;
+ }
+
+ slider {
+ background-color: #${theme.blueAlpha};
+ }
+
+ .floating-notifications.background .notification-row .notification-background {
+ box-shadow:
+ 0 0 8px 0 rgba(0, 0, 0, 0.8),
+ inset 0 0 0 1px #${theme.surface0Alpha};
+ border-radius: 12.6px;
+ margin: 18px;
+ background-color: #${theme.baseAlpha};
+ color: #${theme.textAlpha};
+ padding: 0;
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification {
+ padding: 7px;
+ border-radius: 12.6px;
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification.critical {
+ box-shadow: inset 0 0 7px 0 #${theme.redAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content {
+ margin: 7px;
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .summary {
+ color: #${theme.textAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .time {
+ color: #${theme.subtext0Alpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .body {
+ color: #${theme.textAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > * {
+ min-height: 3.4em;
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action {
+ border-radius: 7px;
+ color: #${theme.textAlpha};
+ background-color: #${theme.surface0Alpha};
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ margin: 7px;
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action:hover {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.surface0Alpha};
+ color: #${theme.textAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action:active {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.sapphireAlpha};
+ color: #${theme.textAlpha};
+ }
+
+ /* Close Button */
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .close-button {
+ margin: 7px;
+ padding: 2px;
+ border-radius: 6.3px;
+ color: #${theme.baseAlpha};
+ background-color: #${theme.redAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .close-button:hover {
+ background-color: #${theme.maroonAlpha};
+ color: #${theme.baseAlpha};
+ }
+
+ .floating-notifications.background
+ .notification-row
+ .notification-background
+ .close-button:active {
+ background-color: #${theme.redAlpha};
+ color: #${theme.baseAlpha};
+ }
+
+ .control-center {
+ box-shadow:
+ 0 0 8px 0 rgba(0, 0, 0, 0.8),
+ inset 0 0 0 1px #${theme.surface0Alpha};
+ border-radius: 12.6px;
+ margin: 18px;
+ background-color: #${theme.baseAlpha};
+ color: #${theme.textAlpha};
+ padding: 14px;
+ }
+
+ .control-center .widget-title > label {
+ color: #${theme.textAlpha};
+ font-size: 1.3em;
+ }
+
+ .control-center .widget-title button {
+ border-radius: 7px;
+ color: #${theme.textAlpha};
+ background-color: #${theme.surface0Alpha};
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ padding: 8px;
+ }
+
+ .control-center .widget-title button:hover {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #585b70;
+ color: #${theme.textAlpha};
+ }
+
+ .control-center .widget-title button:active {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.sapphireAlpha};
+ color: #${theme.baseAlpha};
+ }
+
+ .control-center .notification-row .notification-background {
+ border-radius: 7px;
+ color: #${theme.textAlpha};
+ background-color: #${theme.surface0Alpha};
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ margin-top: 14px;
+ }
+
+ .control-center .notification-row .notification-background .notification {
+ padding: 7px;
+ border-radius: 7px;
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification.critical {
+ box-shadow: inset 0 0 7px 0 #${theme.redAlpha};
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content {
+ margin: 7px;
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .summary {
+ color: #${theme.textAlpha};
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .time {
+ color: #a6adc8;
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ .notification-content
+ .body {
+ color: #${theme.textAlpha};
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > * {
+ min-height: 3.4em;
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action {
+ border-radius: 7px;
+ color: #${theme.textAlpha};
+ background-color: #${theme.crustAlpha};
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ margin: 7px;
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action:hover {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.surface0Alpha};
+ color: #${theme.textAlpha};
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .notification
+ > *:last-child
+ > *
+ .notification-action:active {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.sapphireAlpha};
+ color: #${theme.textAlpha};
+ }
+
+ .control-center .notification-row .notification-background .close-button {
+ margin: 7px;
+ padding: 2px;
+ border-radius: 6.3px;
+ color: #${theme.baseAlpha};
+ background-color: #${theme.maroonAlpha};
+ }
+
+ .close-button {
+ border-radius: 6.3px;
+ }
+
+ .control-center .notification-row .notification-background .close-button:hover {
+ background-color: #${theme.redAlpha};
+ color: #${theme.baseAlpha};
+ }
+
+ .control-center
+ .notification-row
+ .notification-background
+ .close-button:active {
+ background-color: #${theme.redAlpha};
+ color: #${theme.baseAlpha};
+ }
+
+ .control-center .notification-row .notification-background:hover {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.overlay1Alpha};
+ color: #${theme.textAlpha};
+ }
+
+ .control-center .notification-row .notification-background:active {
+ box-shadow: inset 0 0 0 1px #${theme.surface1Alpha};
+ background-color: #${theme.sapphireAlpha};
+ color: #${theme.textAlpha};
+ }
+
+ .notification.critical progress {
+ background-color: #${theme.redAlpha};
+ }
+
+ .notification.low progress,
+ .notification.normal progress {
+ background-color: #${theme.blueAlpha};
+ }
+
+ .control-center-dnd {
+ margin-top: 5px;
+ border-radius: 8px;
+ background: #${theme.surface0Alpha};
+ border: 1px solid #${theme.surface1Alpha};
+ box-shadow: none;
+ }
+
+ .control-center-dnd:checked {
+ background: #${theme.surface0Alpha};
+ }
+
+ .control-center-dnd slider {
+ background: #${theme.surface1Alpha};
+ border-radius: 8px;
+ }
+
+ .widget-dnd {
+ margin: 0px;
+ font-size: 1.1rem;
+ }
+
+ .widget-dnd > switch {
+ font-size: initial;
+ border-radius: 8px;
+ background: #${theme.surface0Alpha};
+ border: 1px solid #${theme.surface1Alpha};
+ box-shadow: none;
+ }
+
+ .widget-dnd > switch:checked {
+ background: #${theme.surface0Alpha};
+ }
+
+ .widget-dnd > switch slider {
+ background: #${theme.surface1Alpha};
+ border-radius: 8px;
+ border: 1px solid #${theme.overlay0Alpha};
+ }
+
+ .widget-mpris .widget-mpris-player {
+ background: #${theme.surface0Alpha};
+ padding: 7px;
+ }
+
+ .widget-mpris .widget-mpris-title {
+ font-size: 1.2rem;
+ }
+
+ .widget-mpris .widget-mpris-subtitle {
+ font-size: 0.8rem;
+ }
+
+ .widget-menubar > box > .menu-button-bar > button > label {
+ font-size: 3rem;
+ padding: 0.5rem 2rem;
+ }
+
+ .widget-menubar > box > .menu-button-bar > :last-child {
+ color: #${theme.redAlpha};
+ }
+
+ .power-buttons button:hover,
+ .powermode-buttons button:hover,
+ .screenshot-buttons button:hover {
+ background: #${theme.surface0Alpha};
+ }
+
+ .control-center .widget-label > label {
+ color: #${theme.textAlpha};
+ font-size: 2rem;
+ }
+
+ .widget-buttons-grid {
+ padding-top: 1rem;
+ }
+
+ .widget-buttons-grid > flowbox > flowboxchild > button label {
+ font-size: 2.5rem;
+ }
+
+ .widget-volume {
+ padding-top: 1rem;
+ }
+
+ .widget-volume label {
+ font-size: 1.5rem;
+ color: #${theme.sapphireAlpha};
+ }
+
+ .widget-volume trough highlight {
+ background: #${theme.sapphireAlpha};
+ }
+
+ .widget-backlight trough highlight {
+ background: #${theme.yellowAlpha};
+ }
+
+ .widget-backlight label {
+ font-size: 1.5rem;
+ color: #${theme.yellowAlpha};
+ }
+
+ .widget-backlight .KB {
+ padding-bottom: 1rem;
+ }
+
+ .image {
+ padding-right: 0.5rem;
+ }
+ '';
};
}
diff --git a/home-manager/hyprland/swaync/mocha.css b/home-manager/hyprland/swaync/mocha.css
deleted file mode 100644
index 1a5acea..0000000
--- a/home-manager/hyprland/swaync/mocha.css
+++ /dev/null
@@ -1,453 +0,0 @@
-/* TODO Variables */
-* {
- all: unset;
- font-size: 14px;
- font-family: "JetBrains Mono", monospace;
- transition: 200ms;
-}
-
-trough highlight {
- background: #cdd6f4;
-}
-
-scale trough {
- margin: 0 1rem;
- background-color: #313244;
- min-height: 8px;
- min-width: 70px;
-}
-
-slider {
- background-color: #89b4fa;
-}
-
-.floating-notifications.background .notification-row .notification-background {
- box-shadow:
- 0 0 8px 0 rgba(0, 0, 0, 0.8),
- inset 0 0 0 1px #313244;
- border-radius: 12.6px;
- margin: 18px;
- background-color: #1e1e2e;
- color: #cdd6f4;
- padding: 0;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification {
- padding: 7px;
- border-radius: 12.6px;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification.critical {
- box-shadow: inset 0 0 7px 0 #f38ba8;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- .notification-content {
- margin: 7px;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- .notification-content
- .summary {
- color: #cdd6f4;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- .notification-content
- .time {
- color: #a6adc8;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- .notification-content
- .body {
- color: #cdd6f4;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > * {
- min-height: 3.4em;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action {
- border-radius: 7px;
- color: #cdd6f4;
- background-color: #313244;
- box-shadow: inset 0 0 0 1px #45475a;
- margin: 7px;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action:hover {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #313244;
- color: #cdd6f4;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action:active {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #74c7ec;
- color: #cdd6f4;
-}
-
-/* Close Button */
-.floating-notifications.background
- .notification-row
- .notification-background
- .close-button {
- margin: 7px;
- padding: 2px;
- border-radius: 6.3px;
- color: #1e1e2e;
- background-color: #f38ba8;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .close-button:hover {
- background-color: #eba0ac;
- color: #1e1e2e;
-}
-
-.floating-notifications.background
- .notification-row
- .notification-background
- .close-button:active {
- background-color: #f38ba8;
- color: #1e1e2e;
-}
-
-.control-center {
- box-shadow:
- 0 0 8px 0 rgba(0, 0, 0, 0.8),
- inset 0 0 0 1px #313244;
- border-radius: 12.6px;
- margin: 18px;
- background-color: #1e1e2e;
- color: #cdd6f4;
- padding: 14px;
-}
-
-.control-center .widget-title > label {
- color: #cdd6f4;
- font-size: 1.3em;
-}
-
-.control-center .widget-title button {
- border-radius: 7px;
- color: #cdd6f4;
- background-color: #313244;
- box-shadow: inset 0 0 0 1px #45475a;
- padding: 8px;
-}
-
-.control-center .widget-title button:hover {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #585b70;
- color: #cdd6f4;
-}
-
-.control-center .widget-title button:active {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #74c7ec;
- color: #1e1e2e;
-}
-
-.control-center .notification-row .notification-background {
- border-radius: 7px;
- color: #cdd6f4;
- background-color: #313244;
- box-shadow: inset 0 0 0 1px #45475a;
- margin-top: 14px;
-}
-
-.control-center .notification-row .notification-background .notification {
- padding: 7px;
- border-radius: 7px;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification.critical {
- box-shadow: inset 0 0 7px 0 #f38ba8;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- .notification-content {
- margin: 7px;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- .notification-content
- .summary {
- color: #cdd6f4;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- .notification-content
- .time {
- color: #a6adc8;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- .notification-content
- .body {
- color: #cdd6f4;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > * {
- min-height: 3.4em;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action {
- border-radius: 7px;
- color: #cdd6f4;
- background-color: #11111b;
- box-shadow: inset 0 0 0 1px #45475a;
- margin: 7px;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action:hover {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #313244;
- color: #cdd6f4;
-}
-
-.control-center
- .notification-row
- .notification-background
- .notification
- > *:last-child
- > *
- .notification-action:active {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #74c7ec;
- color: #cdd6f4;
-}
-
-.control-center .notification-row .notification-background .close-button {
- margin: 7px;
- padding: 2px;
- border-radius: 6.3px;
- color: #1e1e2e;
- background-color: #eba0ac;
-}
-
-.close-button {
- border-radius: 6.3px;
-}
-
-.control-center .notification-row .notification-background .close-button:hover {
- background-color: #f38ba8;
- color: #1e1e2e;
-}
-
-.control-center
- .notification-row
- .notification-background
- .close-button:active {
- background-color: #f38ba8;
- color: #1e1e2e;
-}
-
-.control-center .notification-row .notification-background:hover {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #7f849c;
- color: #cdd6f4;
-}
-
-.control-center .notification-row .notification-background:active {
- box-shadow: inset 0 0 0 1px #45475a;
- background-color: #74c7ec;
- color: #cdd6f4;
-}
-
-.notification.critical progress {
- background-color: #f38ba8;
-}
-
-.notification.low progress,
-.notification.normal progress {
- background-color: #89b4fa;
-}
-
-.control-center-dnd {
- margin-top: 5px;
- border-radius: 8px;
- background: #313244;
- border: 1px solid #45475a;
- box-shadow: none;
-}
-
-.control-center-dnd:checked {
- background: #313244;
-}
-
-.control-center-dnd slider {
- background: #45475a;
- border-radius: 8px;
-}
-
-.widget-dnd {
- margin: 0px;
- font-size: 1.1rem;
-}
-
-.widget-dnd > switch {
- font-size: initial;
- border-radius: 8px;
- background: #313244;
- border: 1px solid #45475a;
- box-shadow: none;
-}
-
-.widget-dnd > switch:checked {
- background: #313244;
-}
-
-.widget-dnd > switch slider {
- background: #45475a;
- border-radius: 8px;
- border: 1px solid #6c7086;
-}
-
-.widget-mpris .widget-mpris-player {
- background: #313244;
- padding: 7px;
-}
-
-.widget-mpris .widget-mpris-title {
- font-size: 1.2rem;
-}
-
-.widget-mpris .widget-mpris-subtitle {
- font-size: 0.8rem;
-}
-
-.widget-menubar > box > .menu-button-bar > button > label {
- font-size: 3rem;
- padding: 0.5rem 2rem;
-}
-
-.widget-menubar > box > .menu-button-bar > :last-child {
- color: #f38ba8;
-}
-
-.power-buttons button:hover,
-.powermode-buttons button:hover,
-.screenshot-buttons button:hover {
- background: #313244;
-}
-
-.control-center .widget-label > label {
- color: #cdd6f4;
- font-size: 2rem;
-}
-
-.widget-buttons-grid {
- padding-top: 1rem;
-}
-
-.widget-buttons-grid > flowbox > flowboxchild > button label {
- font-size: 2.5rem;
-}
-
-.widget-volume {
- padding-top: 1rem;
-}
-
-.widget-volume label {
- font-size: 1.5rem;
- color: #74c7ec;
-}
-
-.widget-volume trough highlight {
- background: #74c7ec;
-}
-
-.widget-backlight trough highlight {
- background: #f9e2af;
-}
-
-.widget-backlight label {
- font-size: 1.5rem;
- color: #f9e2af;
-}
-
-.widget-backlight .KB {
- padding-bottom: 1rem;
-}
-
-.image {
- padding-right: 0.5rem;
-}
diff --git a/modules/default.nix b/modules/default.nix
index e3ee12f..d21e699 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -1,5 +1,3 @@
-{ ... }:
-
{
imports = [
./development.nix
@@ -15,5 +13,6 @@
./steam.nix
./stylix.nix
./terminal
+ ./qt.nix
];
}
diff --git a/modules/fonts.nix b/modules/fonts.nix
index 8203855..f475597 100644
--- a/modules/fonts.nix
+++ b/modules/fonts.nix
@@ -1,5 +1,9 @@
{ pkgs, ... }:
+
{
+ environment.systemPackages = with pkgs; [
+ font-awesome # Icons
+ ];
fonts = {
fontconfig.enable = true;
@@ -8,6 +12,7 @@
jetbrains-mono
# The line below will replace the lines above in 25.05
# nerd-fonts.jetbrains-mono
+ font-awesome
];
};
diff --git a/modules/gnome/default.nix b/modules/gnome/default.nix
index 84488ab..3413ae1 100644
--- a/modules/gnome/default.nix
+++ b/modules/gnome/default.nix
@@ -10,15 +10,13 @@
glib
adwaita-icon-theme
gnomeExtensions.appindicator
- # gnome-extension-manager
+ # gnome-extension-manager
loupe
gnome-calculator
gnome-disk-utility
];
- programs = {
- dconf.enable = true; # Required for some gnome applications
- };
+ programs.dconf.enable = true; # Required for some gnome applications
services = {
gnome.gnome-keyring.enable = true;
diff --git a/modules/gnome/nautilus.nix b/modules/gnome/nautilus.nix
index bc4ee54..f17ad21 100644
--- a/modules/gnome/nautilus.nix
+++ b/modules/gnome/nautilus.nix
@@ -1,13 +1,15 @@
{ pkgs, ... }:
-
+let
+ common = import ../../common.nix;
+in
{
environment.systemPackages = with pkgs; [
nautilus
- ffmpegthumbnailer
+ ffmpegthumbnailer # Thumbnails
];
programs.nautilus-open-any-terminal = {
enable = true;
- terminal = "kitty";
+ terminal = common.terminal;
};
}
diff --git a/modules/hardware/audio.nix b/modules/hardware/audio.nix
index a798bf3..2b3429e 100644
--- a/modules/hardware/audio.nix
+++ b/modules/hardware/audio.nix
@@ -1,10 +1,6 @@
-{
- pkgs,
- ...
-}:
+{ pkgs, ... }:
{
-
environment.systemPackages = with pkgs; [
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
@@ -17,7 +13,7 @@
spotify
];
- hardware.pulseaudio.enable = false; # Will be moved to services
+ hardware.pulseaudio.enable = false; # Will be moved to services in 25.05
security.rtkit.enable = true; # Enable RealtimeKit for audio purposes
@@ -32,6 +28,6 @@
# Uncomment the following line if you want to use JACK applications
# jack.enable = true;
};
- # pulseaudio.enable = false;
+ # pulseaudio.enable = false; # TODO uncommenct at 25.05
};
}
diff --git a/modules/hardware/default.nix b/modules/hardware/default.nix
index 8bbda62..ffd2b30 100644
--- a/modules/hardware/default.nix
+++ b/modules/hardware/default.nix
@@ -1,5 +1,3 @@
-{ ... }:
-
{
imports = [
./audio.nix
diff --git a/modules/hardware/graphics/nvidia.nix b/modules/hardware/graphics/nvidia.nix
index fc07b8b..bb5c7e9 100644
--- a/modules/hardware/graphics/nvidia.nix
+++ b/modules/hardware/graphics/nvidia.nix
@@ -1,5 +1,3 @@
-{ ... }:
-
{
hardware.nvidia = {
# Required
diff --git a/modules/hyprland/default.nix b/modules/hyprland/default.nix
index fca9e09..aa07aff 100644
--- a/modules/hyprland/default.nix
+++ b/modules/hyprland/default.nix
@@ -1,9 +1,8 @@
-# System configurations for Hyprland. For home configs, see ./home/hyprland
+# System configurations for Hyprland. For home configs, see ./home-manager/hyprland
{ pkgs, ... }:
{
imports = [
- ./waybar.nix
./wallpaper.nix
];
@@ -11,6 +10,7 @@
xdg-desktop-portal-hyprland
hyprpolkitagent # Auth deamon providing modals for password auth
hyprshot # Screenshots
+ waybar
];
programs = {
diff --git a/modules/hyprland/waybar.nix b/modules/hyprland/waybar.nix
deleted file mode 100644
index 9032ada..0000000
--- a/modules/hyprland/waybar.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- waybar
- font-awesome # Icons
- ];
-
- fonts.packages = with pkgs; [
- font-awesome
- ];
-}
diff --git a/modules/locale.nix b/modules/locale.nix
index a050f09..9f7a9ed 100644
--- a/modules/locale.nix
+++ b/modules/locale.nix
@@ -5,6 +5,7 @@ let
utf-8 = "UTF-8";
en = "en_GB.${utf-8}";
nb = "nb_NO.${utf-8}";
+ common = import ../common.nix;
in
{
# Configure console keymap
@@ -31,10 +32,7 @@ in
};
# Configure keymaps
- services.xserver.xkb = {
- layout = "gb,no";
- options = "grp:alt_shift_toggle"; # Toggle using ALT + SHIFT
- };
+ services.xserver.xkb = common.keymaps;
# Set your time zone.
time.timeZone = "Europe/Oslo";
diff --git a/modules/networking.nix b/modules/networking.nix
index 86889eb..6d7eb0d 100644
--- a/modules/networking.nix
+++ b/modules/networking.nix
@@ -1,9 +1,10 @@
-{ ... }:
-
+let
+ common = import ../common.nix;
+in
{
networking = {
networkmanager.enable = true;
- hostName = "nixos";
+ hostName = common.hostname;
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
};
diff --git a/modules/nix-helper.nix b/modules/nix-helper.nix
index dca5fca..d1233e4 100644
--- a/modules/nix-helper.nix
+++ b/modules/nix-helper.nix
@@ -1,9 +1,7 @@
-# Nix-Helper: swgithub.com/viperML/nh
-{ ... }:
-
+# Nix-Helper: github.com/viperML/nh
{
programs.nh = {
enable = true;
- flake = ./.;
+ flake = ../.;
};
}
diff --git a/modules/qt.nix b/modules/qt.nix
new file mode 100644
index 0000000..c32c98f
--- /dev/null
+++ b/modules/qt.nix
@@ -0,0 +1,11 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs.kdePackages; [
+ qtwayland
+ qtsvg
+ qt6ct
+ ];
+
+ qt.enable = true;
+}
diff --git a/modules/sddm.nix b/modules/sddm.nix
index f40af06..5c4c032 100644
--- a/modules/sddm.nix
+++ b/modules/sddm.nix
@@ -1,10 +1,13 @@
{ pkgs, ... }:
-
+let
+ theme = import ../theme.nix;
+ flavor = theme.flavor;
+in
{
environment.systemPackages = with pkgs; [
(catppuccin-sddm.override {
- flavor = "mocha";
- font = "Noto Sans";
+ flavor = flavor;
+ font = "JetBrainsMono";
fontSize = "9";
background = "${../catppuccin_high.png}";
loginBackground = true;
@@ -13,7 +16,7 @@
services.displayManager.sddm = {
enable = true;
- theme = "catppuccin-mocha";
+ theme = "catppuccin-${flavor}";
autoNumlock = true; # Enable numlock at login # TODO doesn't work
wayland.enable = true;
package = pkgs.kdePackages.sddm;
diff --git a/modules/security.nix b/modules/security.nix
index 5bc45cb..897fc8d 100644
--- a/modules/security.nix
+++ b/modules/security.nix
@@ -23,7 +23,7 @@
};
services = {
- pcscd.enable = true;
+ pcscd.enable = true; # Required for Yubikey
udev.packages = with pkgs; [ yubikey-personalization ];
};
}
diff --git a/modules/steam.nix b/modules/steam.nix
index 6a9bb65..65035f8 100644
--- a/modules/steam.nix
+++ b/modules/steam.nix
@@ -1,5 +1,3 @@
-{ ... }:
-
{
programs.steam = {
enable = true;
diff --git a/modules/stylix.nix b/modules/stylix.nix
index 7ec6622..cb5ba22 100644
--- a/modules/stylix.nix
+++ b/modules/stylix.nix
@@ -1,12 +1,15 @@
{ pkgs, ... }:
-
+let
+ theme = import ../theme.nix;
+in
{
stylix = {
enable = true;
image = ../catppuccin.png;
- base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
+ base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-${theme.flavor}.yaml";
polarity = "dark";
opacity.terminal = 0.8;
+ # Override some colours because of bad contrast
override = {
base02 = "b0b0b0"; # Comments in shell
base03 = "b0b0b0"; # Comments in nvim
diff --git a/theme.nix b/theme.nix
new file mode 100644
index 0000000..f133427
--- /dev/null
+++ b/theme.nix
@@ -0,0 +1,41 @@
+rec {
+ theme = "catppuccin";
+ flavor = "mocha";
+
+ # TODO how to define font? JetBrainsMono | JetBrains Mono | JetBrainsMono Nerd Font | JetBrains Mono Nerd Font
+ nerdFont = "JetBrainsMono";
+
+ rosewaterAlpha = "f5e0dc";
+ flamingoAlpha = "f2cdcd";
+ pinkAlpha = "f5c2e7";
+ mauveAlpha = "cba6f7";
+ mauveRgb = "rgb(${mauveAlpha})";
+ redAlpha = "f38ba8";
+ redRgb = "rgb(${redAlpha})";
+ maroonAlpha = "eba0ac";
+ peachAlpha = "fab387";
+ yellowAlpha = "f9e2af";
+ yellowRgb = "rgb(${yellowAlpha})";
+ greenAlpha = "a6e3a1";
+ tealAlpha = "94e2d5";
+ tealRgb = "rgb(${tealAlpha})";
+ skyAlpha = "89dceb";
+ sapphireAlpha = "74c7ec";
+ blueAlpha = "89b4fa";
+ lavenderAlpha = "b4befe";
+ textAlpha = "cdd6f4";
+ textRgb = "rgb(${textAlpha})";
+ subtext1Alpha = "bac2de";
+ subtext0Alpha = "a6adc8";
+ overlay2Alpha = "9399b2";
+ overlay1Alpha = "7f849c";
+ overlay0Alpha = "6c7086";
+ surface2Alpha = "585b70";
+ surface1Alpha = "45475a";
+ surface0Alpha = "313244";
+ surface0Rgb = "rgb(${surface0Alpha})";
+ baseAlpha = "1e1e2e";
+ baseRgb = "rgb(${baseAlpha})";
+ mantleAlpha = "181825";
+ crustAlpha = "11111b";
+}