Merge pull request 'common-config' (#2) from common-config into main

📦 Created config files with common code

- Created common.nix for various configs
- Created theme.nix for theme related configs
- Moved some code to more logical files
- Moved some standalone files into nix multi-line strings, in order to
  inject data
- Replaced some ambiguous characters
This commit is contained in:
Martin Berg Alstad 2025-01-08 18:52:07 +00:00
commit 0e15fa0b0d
37 changed files with 959 additions and 910 deletions

33
common.nix Normal file
View File

@ -0,0 +1,33 @@
rec {
default = {
browser = "io.github.zen_browser.zen.desktop";
calculator = "gnome-calculator";
fileManager = "nautilus";
imageViewer = "org.gnome.Loupe.desktop";
lockScreen = "hyprlock";
terminal = "kitty";
};
dir = {
home = "/home/${username}";
pictures = "${dir.home}/Pictures";
};
hostname = "nixos";
keymaps = {
layout = "gb,no";
options = "grp:alt_shift_toggle"; # Toggle using ALT + SHIFT
};
username = "martin";
# 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 = default.terminal; # TODO remove
}

View File

@ -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 = {
# Define a user account. Don't forget to set a password with 'passwd'.
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. Its 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;
}

View File

@ -43,15 +43,19 @@
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager = {
# Backups conflicting files in case of error
backupFileExtension = "bkp";
useGlobalPkgs = true;
useUserPackages = true;
# Passes inputs as an argument to home-manager
extraSpecialArgs = { inherit inputs; };
users.martin = import ./home-manager;
};
home-manager =
let
common = import ./common.nix;
in
{
# Backups conflicting files in case of error
backupFileExtension = "bkp";
useGlobalPkgs = true;
useUserPackages = true;
# Passes inputs as an argument to home-manager
extraSpecialArgs = { inherit inputs; };
users.${common.username} = import ./home-manager;
};
}
stylix.nixosModules.stylix
];

View File

@ -1,5 +1,4 @@
{ ... }:
# TODO more defaults
{
xdg.mimeApps = {
enable = true;

View File

@ -4,8 +4,9 @@
...
}:
let
username = "martin";
homeDir = "/home/${username}";
common = import ../common.nix;
username = common.username;
dir = common.dir;
in
{
imports = [
@ -22,19 +23,21 @@ in
# paths it should manage.
home = {
username = username;
homeDirectory = homeDir;
homeDirectory = dir.home;
sessionVariables = {
XDG_PICTURES_DIR = "${homeDir}/Pictures";
XDG_PICTURES_DIR = dir.pictures; # Define the default dir for pictures
};
# 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 = {
btop.enable = true;
git = {
enable = true;
userName = "Martin Berg Alstad";
@ -47,7 +50,10 @@ in
# Let Home Manager install and manage itself.
home-manager.enable = true;
kitty.enable = true;
kitty = {
enable = common.terminal == "kitty";
settings.window_padding_width = 10;
};
};
services = {

View File

@ -1,5 +1,13 @@
{ pkgs, ... }:
{ pkgs, lib, ... }:
let
replace =
from: to: current:
if current == from then to else current;
toSingleLine =
with lib.strings;
s: concatMapStrings (stringAsChars (replace "\n" "")) (splitString "n" s);
theme = import ../theme.nix;
in
{
programs = {
fish = {
@ -18,9 +26,173 @@
];
};
# TODO catppuccin colours on all parts
starship = {
enable = true;
settings = (with builtins; fromTOML (readFile ./starship.toml)) // { };
settings = {
format = toSingleLine ''
[](#${theme.mantleAlpha})
$os
$username
[](bg:#${theme.lavenderAlpha} fg:#${theme.mantleAlpha})
$directory
[](fg:#${theme.lavenderAlpha} bg:#${theme.blueAlpha})
$git_branch
$git_status
[](fg:#${theme.blueAlpha} bg:#86BBD8)
$c
$elixir
$elm
$golang
$gradle
$haskell
$java
$julia
$nodejs
$nim
$rust
$scala
[](fg:#86BBD8 bg:#06969A)
$docker_context
[](fg:#06969A bg:#33658A)
$time
[ ](fg:#33658A)
'';
# Disable the blank line at the start of the prompt
# add_newline = false
# You can also replace your username with a neat symbol like  or disable this
# and use the os module below
username = {
show_always = false;
style_user = "bg:#${theme.crustAlpha}";
style_root = "bg:#${theme.mantleAlpha}";
format = "[$user]($style) in ";
disabled = false;
};
os = {
style = "bg:#${theme.mantleAlpha}";
disabled = false;
};
directory = {
style = "bg:#${theme.lavenderAlpha} fg:#${theme.baseAlpha}";
format = "[ $path ]($style)";
truncation_length = 3;
truncation_symbol = "/";
};
# Here is how you can shorten some long paths by text replacement
# similar to mapped_locations in Oh My Posh:
directory.substitutions = {
"Documents" = "󰈙 ";
"Downloads" = " ";
"Music" = "󰓃 ";
"Pictures" = " ";
};
# Keep in mind that the order matters. For example:
# "Important Documents" = " 󰈙 "
# will not be replaced, because "Documents" was already substituted before.
# So either put "Important Documents" before "Documents" or use the substituted version:
# "Important 󰈙 " = " 󰈙 "
c = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
docker_context = {
symbol = " ";
style = "bg:#06969A";
format = "[ $symbol $context ]($style)";
};
elixir = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
elm = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
git_branch = {
symbol = " ";
style = "bg:#${theme.blueAlpha} fg:#${theme.baseAlpha}";
format = "[ $symbol $branch ]($style)";
};
git_status = {
style = "bg:#${theme.blueAlpha} fg:#${theme.baseAlpha}";
format = "[$all_status$ahead_behind ]($style)";
};
golang = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
gradle = {
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
haskell = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
java = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
julia = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
nodejs = {
symbol = "";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
nim = {
symbol = "󰆥 ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
rust = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
scala = {
symbol = " ";
style = "bg:#86BBD8";
format = "[ $symbol ($version) ]($style)";
};
time = {
disabled = false;
time_format = "%R"; # Hour:Minute Format
style = "bg:#33658A";
format = "[ $time ]($style)";
};
};
};
};
}

View File

@ -1,25 +1,27 @@
let
common = import ../../common.nix;
app = common.default;
in
{
# TODO binds to move focused window
wayland.windowManager.hyprland.settings = {
"$mainMod" = "SUPER";
"$shiftMod" = "$mainMod SHIFT";
"$menu" = "rofi -show drun";
bind = [
"$mainMod, Q, exec, $terminal"
"$mainMod, Q, exec, ${app.terminal}"
"$mainMod, C, killactive,"
"$shiftMod, M, exit,"
"$mainMod, E, exec, $fileManager"
"$mainMod, E, exec, ${app.fileManager}"
"$mainMod, V, togglefloating,"
"$mainMod, R, exec, $menu"
"$mainMod, P, pseudo," # dwindle
"$mainMod, J, togglesplit," # dwindle
"$mainMod, B, exec, $browser"
"$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
"$mainMod, B, exec, ${app.browser}"
"$mainMod, L, exec, ${app.lockScreen}"
"$mainMod, K, exec, [float] ${app.calculator}"
"$mainMod, ESC, exec, wlogout"
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"

View File

@ -6,14 +6,10 @@
./waybar
./hypridle
./hyprlock
./hyprshot.nix
./settings.nix
./swaync
];
programs = {
btop.enable = true;
kitty.settings.window_padding_width = 10;
};
wayland.windowManager.hyprland.enable = true;
}

View File

@ -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 = [

View File

@ -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

View File

@ -1,4 +1,3 @@
{ ... }:
let
# Time in seconds
lockAfter = 1200;

View File

@ -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 = "<span foreground=\"##$textAlpha\"><i>󰌾 Logged in as </i><span foreground=\"##$accentAlpha\">$USER</span></span>";
placeholder_text = "<span foreground=\"##${theme.textAlpha}\"><i>󰌾 Logged in as </i><span foreground=\"##${theme.mauveAlpha}\">$USER</span></span>";
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 = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
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";
};

View File

@ -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
];
};
}

View File

@ -1,5 +1,9 @@
{ lib, ... }:
let
common = import ../../common.nix;
app = common.default;
theme = import ../../theme.nix;
in
{
wayland.windowManager.hyprland.settings = {
monitor = [
@ -7,16 +11,11 @@
"DP-3, 2560x1440@59.95, 1920x0, 1"
];
"$browser" = "io.github.zen_browser.zen";
"$terminal" = "kitty";
"$fileManager" = "nautilus";
"$menu" = "rofi -show drun";
# Autostart
exec-once = [
"$browser"
"${app.browser}"
"nextcloud"
"$terminal"
"${app.terminal}"
"hypridle"
"systemctl --user start hyprpolkitagent"
"swaync"
@ -25,98 +24,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 +49,7 @@
enabled = true;
range = 4;
render_power = 3;
color = lib.mkDefault "$base";
color = lib.mkDefault theme.baseRgb;
};
blur = {
@ -192,10 +108,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;

View File

@ -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: "${theme.nerdFont} Nerd Font", 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;
}
'';
};
}

View File

@ -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;
}

View File

@ -1,6 +1,4 @@
# Neovim configuration for Nix
{ ... }:
{
home.sessionVariables = {
EDITOR = "nvim";

View File

@ -1,174 +0,0 @@
"$schema" = 'https://starship.rs/config-schema.json'
palette = "catppuccin_mocha"
format = """
[](mantle)\
$os\
$username\
[](bg:lavender fg:mantle)\
$directory\
[](fg:lavender bg:blue)\
$git_branch\
$git_status\
[](fg:blue bg:#86BBD8)\
$c\
$elixir\
$elm\
$golang\
$gradle\
$haskell\
$java\
$julia\
$nodejs\
$nim\
$rust\
$scala\
[](fg:#86BBD8 bg:#06969A)\
$docker_context\
[](fg:#06969A bg:#33658A)\
$time\
[ ](fg:#33658A)\
"""
# Disable the blank line at the start of the prompt
# add_newline = false
[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
# You can also replace your username with a neat symbol like  or disable this
# and use the os module below
[username]
show_always = false
style_user = "bg:crust"
style_root = "bg:mantle"
format = "[$user]($style) in "
disabled = false
[os]
style = "bg:mantle"
disabled = false
[directory]
style = "bg:lavender fg:base"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
# Here is how you can shorten some long paths by text replacement
# similar to mapped_locations in Oh My Posh:
[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = " "
"Pictures" = " "
# Keep in mind that the order matters. For example:
# "Important Documents" = " 󰈙 "
# will not be replaced, because "Documents" was already substituted before.
# So either put "Important Documents" before "Documents" or use the substituted version:
# "Important 󰈙 " = " 󰈙 "
[c]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[docker_context]
symbol = " "
style = "bg:#06969A"
format = '[ $symbol $context ]($style)'
[elixir]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[elm]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[git_branch]
symbol = " "
style = "bg:blue fg:base"
format = '[ $symbol $branch ]($style)'
[git_status]
style = "bg:blue fg:base"
format = '[$all_status$ahead_behind ]($style)'
[golang]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[gradle]
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[haskell]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[java]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[julia]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[nodejs]
symbol = ""
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[nim]
symbol = "󰆥 "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[rust]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[scala]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[time]
disabled = false
time_format = "%R" # Hour:Minute Format
style = "bg:#33658A"
format = '[ $time ]($style)'

View File

@ -1,15 +1,17 @@
# Log out and shutdown menu
{ ... }:
{
home.file = {
".config/wlogout/hibernate.svg".source = ./hibernate.svg;
".config/wlogout/lock.svg".source = ./lock.svg;
".config/wlogout/logout.svg".source = ./logout.svg;
".config/wlogout/reboot.svg".source = ./reboot.svg;
".config/wlogout/shutdown.svg".source = ./shutdown.svg;
".config/wlogout/suspend.svg".source = ./suspend.svg;
};
home.file =
let
dir = ".config/wlogout";
in
{
"${dir}/hibernate.svg".source = ./hibernate.svg;
"${dir}/lock.svg".source = ./lock.svg;
"${dir}/logout.svg".source = ./logout.svg;
"${dir}/reboot.svg".source = ./reboot.svg;
"${dir}/shutdown.svg".source = ./shutdown.svg;
"${dir}/suspend.svg".source = ./suspend.svg;
};
programs.wlogout = {
enable = true;
@ -51,6 +53,64 @@
keybind = "r";
}
];
style = ./style.css;
style =
let
theme = import ../../theme.nix;
in
''
* {
background-image: none;
box-shadow: none;
}
window {
background-color: rgba(30, 30, 46, 0.9);
}
button {
border-radius: 0;
border-color: #${theme.pinkAlpha};
text-decoration-color: #${theme.textAlpha};
color: #${theme.textAlpha};
background-color: #${theme.mantleAlpha};
border-style: solid;
border-width: 1px;
background-repeat: no-repeat;
background-position: center;
background-size: 25%;
}
button:focus,
button:active,
button:hover {
/* 20% Overlay 2, 80% mantle */
background-color: rgb(48, 50, 66);
outline-style: none;
}
#lock {
background-image: url("./lock.svg");
}
#logout {
background-image: url("./logout.svg");
}
#suspend {
background-image: url("./suspend.svg");
}
#hibernate {
background-image: url("./hibernate.svg");
}
#shutdown {
background-image: url("./shutdown.svg");
}
#reboot {
background-image: url("./reboot.svg");
}
'';
};
}

View File

@ -1,5 +1,3 @@
{ ... }:
{
imports = [
./development.nix
@ -15,5 +13,6 @@
./steam.nix
./stylix.nix
./terminal
./qt.nix
];
}

View File

@ -1,14 +1,23 @@
{ pkgs, ... }:
{
fonts = {
fontconfig.enable = true;
packages = with pkgs; [
(nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
jetbrains-mono
# The line below will replace the lines above in 25.05
# nerd-fonts.jetbrains-mono
];
};
{
environment.systemPackages = with pkgs; [
font-awesome # Icons
];
fonts =
let
theme = import ../theme.nix;
in
{
fontconfig.enable = true;
packages = with pkgs; [
(nerdfonts.override { fonts = [ theme.nerdFont ]; })
jetbrains-mono
# The line below will replace the lines above in 25.05
# nerd-fonts.jetbrains-mono
font-awesome
];
};
}

View File

@ -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;

View File

@ -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;
};
}

View File

@ -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
};
}

View File

@ -1,5 +1,3 @@
{ ... }:
{
imports = [
./audio.nix

View File

@ -1,5 +1,3 @@
{ ... }:
{
hardware.nvidia = {
# Required

View File

@ -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 = {

View File

@ -1,12 +0,0 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
waybar
font-awesome # Icons
];
fonts.packages = with pkgs; [
font-awesome
];
}

View File

@ -1,10 +1,9 @@
{ ... }:
# TODO move locale config for hyprland here
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 +30,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";

View File

@ -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.
};

View File

@ -1,9 +1,7 @@
# Nix-Helper: swgithub.com/viperML/nh
{ ... }:
# Nix-Helper: github.com/viperML/nh
{
programs.nh = {
enable = true;
flake = ./.;
flake = ../.;
};
}

11
modules/qt.nix Normal file
View File

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs.kdePackages; [
qtwayland
qtsvg
qt6ct
];
qt.enable = true;
}

View File

@ -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 = theme.nerdFont;
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;

View File

@ -23,7 +23,7 @@
};
services = {
pcscd.enable = true;
pcscd.enable = true; # Required for Yubikey
udev.packages = with pkgs; [ yubikey-personalization ];
};
}

View File

@ -1,5 +1,3 @@
{ ... }:
{
programs.steam = {
enable = true;

View File

@ -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

41
theme.nix Normal file
View File

@ -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";
}