diff --git a/flake.nix b/flake.nix
index 54c368c..baed75e 100644
--- a/flake.nix
+++ b/flake.nix
@@ -41,7 +41,9 @@
flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux"];
imports = [
+ inputs.home-manager.flakeModules.home-manager
./hosts/comfy-station
+ (./home + "/jonas@comfy-station")
(import-tree ./modules)
];
};
diff --git a/home/jonas@comfy-station/borg.nix b/home/jonas@comfy-station/borg.nix
new file mode 100644
index 0000000..fb1fcfa
--- /dev/null
+++ b/home/jonas@comfy-station/borg.nix
@@ -0,0 +1,131 @@
+{config, ...}: let
+ defaultChecks = [
+ {
+ name = "repository";
+ frequency = "2 weeks";
+ }
+ {
+ name = "archives";
+ frequency = "4 weeks";
+ }
+ {
+ name = "data";
+ frequency = "6 weeks";
+ }
+ {
+ name = "extract";
+ frequency = "6 weeks";
+ }
+ ];
+ passwordFile = "${config.home.homeDirectory}/.config/borg/password";
+ encCmd = ''cat ${passwordFile}'';
+ repo = "ssh://borg.jroeger.de/./comfy-station";
+in {
+ sops.secrets = {
+ "borg/password" = {
+ sopsFile = ../../secrets/jonas/borg.yaml;
+ key = "password";
+ path = passwordFile;
+ };
+ };
+
+ services.borgmatic.enable = true;
+ services.borgmatic.frequency = "hourly";
+
+ programs.borgmatic.enable = true;
+ programs.borgmatic.backups = {
+ workspaces = {
+ location = {
+ sourceDirectories = ["${config.xdg.userDirs.extraConfig.XDG_WORKSPACES_DIR}"];
+ repositories = [repo];
+ excludeHomeManagerSymlinks = true;
+ extraConfig = {
+ archive_name_format = "{hostname}-workspaces-{now}";
+ exclude_patterns = [
+ "*/.venv"
+ "__pycache__"
+ ];
+ };
+ };
+ retention = {
+ keepDaily = 7;
+ keepHourly = 12;
+ keepWeekly = 4;
+ keepMonthly = 6;
+ };
+ storage = {
+ encryptionPasscommand = encCmd;
+ };
+ consistency.checks = defaultChecks;
+ };
+ media = {
+ location = {
+ sourceDirectories = [
+ "${config.xdg.userDirs.documents}"
+ "${config.xdg.userDirs.music}"
+ "${config.home.homeDirectory}/org"
+ "${config.home.homeDirectory}/Obsidian"
+ "${config.home.homeDirectory}/Zotero"
+ ];
+ repositories = [repo];
+ excludeHomeManagerSymlinks = true;
+ extraConfig = {
+ archive_name_format = "{hostname}-media-{now}";
+ };
+ };
+ retention = {
+ keepDaily = 7;
+ keepWeekly = 2;
+ keepMonthly = 6;
+ };
+ storage = {
+ encryptionPasscommand = encCmd;
+ };
+ consistency.checks = defaultChecks;
+ };
+ sec = {
+ location = {
+ sourceDirectories = [
+ "${config.xdg.configHome}/sops"
+ "${config.home.homeDirectory}/Stuff/sec"
+ "${config.home.homeDirectory}/.password-store"
+ ];
+ repositories = [repo];
+ excludeHomeManagerSymlinks = true;
+ extraConfig = {
+ archive_name_format = "{hostname}-sec-{now}";
+ };
+ };
+ retention = {
+ keepDaily = 7;
+ keepWeekly = 2;
+ keepMonthly = 6;
+ };
+ storage = {
+ encryptionPasscommand = encCmd;
+ };
+ consistency.checks = defaultChecks;
+ };
+ var = {
+ location = {
+ sourceDirectories = [
+ "${config.xdg.userDirs.desktop}"
+ ];
+ repositories = [repo];
+ excludeHomeManagerSymlinks = true;
+ extraConfig = {
+ archive_name_format = "{hostname}-var-{now}";
+ };
+ };
+ retention = {
+ keepDaily = 7;
+ keepWeekly = 2;
+ keepMonthly = 6;
+ };
+ storage = {
+ encryptionPasscommand = encCmd;
+ };
+ consistency.checks = defaultChecks;
+ };
+ };
+}
diff --git a/home/jonas@comfy-station/configuration.nix b/home/jonas@comfy-station/configuration.nix
new file mode 100644
index 0000000..a780603
--- /dev/null
+++ b/home/jonas@comfy-station/configuration.nix
@@ -0,0 +1,101 @@
+{
+ config,
+ lib,
+ ...
+}: {
+ imports = [
+ ./borg.nix
+ ];
+
+ # Home Manager needs a bit of information about you and the paths it should
+ # manage.
+ home.username = "jonas";
+ home.homeDirectory = "/home/jonas";
+
+ sops = {
+ age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
+ };
+
+ # hive modules
+ #hive.waybar.enable = true;
+ #hive.wlogout.enable = true;
+ #hive.wofi.enable = true;
+ #hive.kitty.enable = true;
+ #hive.nextcloud.enable = true;
+ #hive.firefox = {
+ # enable = true;
+ # plasmaIntegration = true;
+ # passFF = true;
+ #};
+ #hive.kdeconnect.enable = true;
+ #hive.ranger.enable = true;
+ #hive.ssh = {
+ # enable = true;
+ # sopsFile = ../secrets/jonas/ssh.yaml;
+ # keys = ["borg" "passgit"];
+ #};
+ #hive.yubikey.enable = true;
+ #hive.yubikey.withCCID = false;
+ #hive.zsh.enable = true;
+ #hive.nix-scripts.enable = true;
+ #hive.doom.enable = true;
+ #hive.doom.asDefaultEditor = true;
+ #hive.doom.enableCopilot = true;
+ #hive.doom.withNixPkgs = true;
+ #hive.doom.withShellPkgs = true;
+ #hive.doom.withPythonPkgs = true;
+ #hive.jj.enable = true;
+
+ # Make session variables available in systemd units
+ # SEE: https://github.com/nix-community/home-manager/pull/5543
+ # systemd.user.settings.Manager.DefaultEnvironment =
+ # lib.mapAttrs (_: lib.mkDefault) config.home.sessionVariables;
+
+ xdg.mimeApps = {
+ enable = true;
+
+ defaultApplications = {
+ "text/html" = "firefox.desktop";
+ "x-scheme-handler/http" = "firefox.desktop";
+ "x-scheme-handler/https" = "firefox.desktop";
+ "x-scheme-handler/about" = "firefox.desktop";
+ "x-scheme-handler/unknown" = "firefox.desktop";
+ };
+ };
+ xdg.userDirs.enable = true;
+ xdg.userDirs.createDirectories = true;
+ xdg.userDirs.extraConfig = {
+ XDG_WORKSPACES_DIR = "${config.home.homeDirectory}/Workspaces";
+ XDG_NEXTCLOUD_DIR = "${config.home.homeDirectory}/Nextcloud";
+ XDG_NOTES_DIR = "${config.home.homeDirectory}/Notes";
+ };
+
+ # This value determines the Home Manager release that your configuration is
+ # compatible with. This helps avoid breakage when a new Home Manager release
+ # introduces backwards incompatible changes.
+ #
+ # You should not change this value, even if you update Home Manager. If you do
+ # want to update the value, then make sure to first check the Home Manager
+ # release notes.
+ home.stateVersion = "24.11"; # Please read the comment before changing.
+
+ home.sessionVariables = {
+ EDITOR = lib.mkDefault "vim";
+ };
+
+ # Let Home Manager install and manage itself.
+ programs.home-manager.enable = true;
+
+ # Git
+ programs.difftastic.enable = true;
+ programs.difftastic.git.enable = true;
+ programs.git = {
+ enable = true;
+ settings.user.name = "Jonas Röger";
+ settings.user.email = "jonas.roeger@tu-dortmund.de";
+ signing = {
+ signByDefault = true;
+ key = "4000EB35E1AE0F07";
+ };
+ };
+}
diff --git a/home/jonas@comfy-station/default.nix b/home/jonas@comfy-station/default.nix
new file mode 100644
index 0000000..4dfc26f
--- /dev/null
+++ b/home/jonas@comfy-station/default.nix
@@ -0,0 +1,21 @@
+{
+ self,
+ inputs,
+ ...
+}: {
+ flake.homeConfigurations."jonas@comfy-station" = inputs.home-manager.lib.homeManagerConfiguration {
+ pkgs = import inputs.nixpkgs {system = "x86_64-linux";};
+ modules = [
+ ({...}: {nixpkgs.overlays = [self.overlays.unstable inputs.audio.overlays.default];})
+ ({...}: {nixpkgs.config.allowUnfree = true;})
+
+ ./configuration.nix
+
+ inputs.sops-nix.homeManagerModules.sops
+ self.homeModules.layan
+ self.homeModules.hyprland
+ self.homeModules.swaync
+ self.homeModules.waybar
+ ];
+ };
+}
diff --git a/hosts/comfy-station/default.nix b/hosts/comfy-station/default.nix
index 36912ad..c327758 100644
--- a/hosts/comfy-station/default.nix
+++ b/hosts/comfy-station/default.nix
@@ -7,7 +7,6 @@
modules = [
({...}: {
nixpkgs.config.allowUnfree = true;
- nixpkgs.overlays = [self.overlays.unstable self.overlays.bulk-transcode];
})
./configuration.nix
@@ -25,6 +24,8 @@
self.nixosModules.games
self.nixosModules.creative
self.nixosModules.openhantek
+ self.nixosModules.unstable-overlay
+ self.nixosModules.bulk-transcode-overlay
];
};
}
diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix
index 93cae48..8665a0a 100644
--- a/modules/desktop/hyprland.nix
+++ b/modules/desktop/hyprland.nix
@@ -53,4 +53,380 @@
security.pam.services.hyprlock = {};
};
};
+
+ flake.homeModules.hyprland = {pkgs, ...}: let
+ screenshot = pkgs.writeShellScriptBin "screenshot" ''
+ region=0
+ clip=0
+ while [[ "$#" -gt 0 ]]; do
+ case $1 in
+ --region) region=1; ;;
+ --clip) clip=1; ;;
+ *) echo "Unknown parameter passed: $1"; exit 1 ;;
+ esac
+ shift
+ done
+
+ if [[ $region -eq 1 ]]; then
+ if [[ $clip -eq 1 ]]; then
+ ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.wl-clipboard}/bin/wl-copy
+ else
+ ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" ~/Pictures/Screenshots/$(${pkgs.coreutils}/bin/date +'%Y-%m-%d_%H-%M-%S').png
+ fi
+ else
+ if [[ $clip -eq 1 ]]; then
+ ${pkgs.grim}/bin/grim - | ${pkgs.wl-clipboard}/bin/wl-copy
+ else
+ ${pkgs.grim}/bin/grim ~/Pictures/Screenshots/$(${pkgs.coreutils}/bin/date +'%Y-%m-%d_%H-%M-%S').png
+ fi
+ fi
+ '';
+ in {
+ wayland.windowManager.hyprland = {
+ enable = true;
+ systemd.enable = false;
+ systemd.variables = ["--all"];
+ xwayland.enable = true;
+ };
+
+ home.packages = with pkgs; [
+ wl-clipboard
+ ];
+
+ services.wpaperd = {
+ enable = true;
+ settings = {
+ default = {
+ path = ../../static/wallpaper/stones.jpg;
+ };
+ };
+ };
+
+ services.hypridle.enable = true;
+ services.hypridle.settings = {
+ general = {
+ # lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session)
+ # unlock_cmd = notify-send "unlock!" # same as above, but unlock
+ ignore_dbus_inhibit = "false"; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
+ lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
+ before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
+ after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
+ };
+
+ listener = [
+ # Screenlock
+ {
+ timeout = 180; # in seconds
+ on-timeout = "hyprlock"; # command to run when timeout has passed
+ # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired.
+ }
+ # Suspend
+ {
+ timeout = 360; # in seconds
+ on-timeout = "systemctl suspend"; # command to run when timeout has passed
+ # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired.
+ }
+ ];
+ };
+
+ programs.hyprlock = {
+ enable = true;
+ settings = {
+ background = [
+ {
+ path = "screenshot"; # only png supported for now
+ # color = $color1
+
+ # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
+ blur_size = 4;
+ blur_passes = 3; # 0 disables blurring
+ noise = 0.0117;
+ contrast = 1.3000; # Vibrant!!!
+ brightness = 0.8000;
+ vibrancy = 0.2100;
+ vibrancy_darkness = 0.0;
+ }
+ ];
+
+ # Hours
+ label = [
+ {
+ text = ''cmd[update:1000] echo " $(date +"%H") "'';
+ #color = $color6
+ font_size = 112;
+ # font_family = Geist Mono 10
+ shadow_passes = 3;
+ shadow_size = 4;
+
+ position = "0, 220";
+ halign = "center";
+ valign = "center";
+ }
+ {
+ text = ''cmd[update:1000] echo " $(date +"%M") "'';
+ # color = $color6
+ font_size = 112;
+ # font_family = Geist Mono 10
+ shadow_passes = 3;
+ shadow_size = 4;
+
+ position = "0, 80";
+ halign = "center";
+ valign = "center";
+ }
+ {
+ text = ''cmd[update:18000000] echo " "$(date +'%A')" "'';
+ # color = $color7
+ font_size = 22;
+ # font_family = JetBrainsMono Nerd Font 10
+
+ position = "0, -10";
+ halign = "center";
+ valign = "center";
+ }
+ {
+ text = ''cmd[update:18000000] echo " "$(${pkgs.coreutils-full}/bin/date +'%d %b')" "'';
+ # color = $color7
+ font_size = 18;
+ #font_family = JetBrainsMono Nerd Font 10
+
+ position = "0, -40";
+ halign = "center";
+ valign = "center";
+ }
+ {
+ text = ''cmd[update:18000000] echo "So ca. $(${pkgs.curl}/bin/curl -s 'wttr.in?format=%t' | ${pkgs.coreutils-full}/bin/tr -d '+') oder watt."'';
+ #color = $color7
+ font_size = 18;
+ # font_family = Geist Mono 10
+
+ position = "0, 40";
+ halign = "center";
+ valign = "bottom";
+ }
+ ];
+
+ input-field = [
+ {
+ size = "250, 50";
+ outline_thickness = 3;
+
+ dots_size = 0.26; # Scale of input-field height, 0.2 - 0.8
+ dots_spacing = 0.64; # Scale of dots' absolute size, 0.0 - 1.0
+ dots_center = true;
+ dots_rouding = -1;
+
+ rounding = 22;
+ # outer_color = $color0
+ # inner_color = $color0
+ # font_color = $color6
+ fade_on_empty = true;
+ placeholder_text = ''Password...''; # Text rendered in the input box when it's empty.
+
+ position = "0, 120";
+ halign = "center";
+ valign = "bottom";
+ }
+ ];
+ };
+ };
+
+ wayland.windowManager.hyprland = {
+ settings = {
+ exec-once = [
+ "${pkgs.wpaperd}/bin/wpaperd &"
+ ];
+
+ "$mod" = "SUPER";
+ bind =
+ [
+ "$mod, RETURN, exec, ${pkgs.kitty}/bin/kitty"
+ "$mod, d, exec, ${pkgs.wofi}/bin/wofi --show drun"
+ "$mod, h, movefocus, l"
+ "$mod, j, movefocus, d"
+ "$mod, k, movefocus, u"
+ "$mod, l, movefocus, r"
+ "$mod, LEFT, movefocus, l"
+ "$mod, DOWN, movefocus, d"
+ "$mod, UP, movefocus, u"
+ "$mod, RIGHT, movefocus, r"
+ "$mod SHIFT, h, movewindow, l"
+ "$mod SHIFT, j, movewindow, d"
+ "$mod SHIFT, k, movewindow, u"
+ "$mod SHIFT, l, movewindow, r"
+ "$mod SHIFT, LEFT, movewindow, l"
+ "$mod SHIFT, DOWN, movewindow, d"
+ "$mod SHIFT, UP, movewindow, u"
+
+ "$mod CTRL SHIFT, LEFT, moveactive, -10 0"
+ "$mod CTRL SHIFT, DOWN, moveactive, 0 10"
+ "$mod CTRL SHIFT, UP, moveactive, 0 -10"
+ "$mod CTRL SHIFT, RIGHT, moveactive, 10 0"
+ "$mod CTRL SHIFT, h, moveactive, -10 0"
+ "$mod CTRL SHIFT, j, moveactive, 0 10"
+ "$mod CTRL SHIFT, k, moveactive, 0 -10"
+ "$mod CTRL SHIFT, l, moveactive, 10 0"
+ "$mod SHIFT, q, killactive"
+ "$mod CTRL, h, resizeactive, -5% 0%"
+ "$mod CTRL, l, resizeactive, 5% 0%"
+ "$mod CTRL, j, resizeactive, 0% -5%"
+ "$mod CTRL, k, resizeactive, 0% 5%"
+ "$mod, SPACE, togglefloating, active"
+ "$mod SHIFT, SPACE, centerwindow"
+ "$mod, f, fullscreen, 1"
+ "$mod SHIFT, f, fullscreen, 0"
+ "$mod CTRL, f, fullscreenstate, -1 2"
+ "$mod SHIFT, s, pin"
+ "$mod SHIFT, x, exec, ${pkgs.hyprland}/bin/hyprctl kill"
+ ", XF86AudioRaiseVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5"
+ ", XF86AudioLowerVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5"
+ ", XF86AudioMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute"
+ ", XF86AudioMicMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute --id 1"
+ ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5%"
+ ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
+ "$mod, 9, exec, ${pkgs.hyprlock}/bin/hyprlock"
+ "$mod, 0, exec, ${pkgs.wlogout}/bin/wlogout -b 5"
+ "$mod, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t"
+ ", Print, exec, ${screenshot}/bin/screenshot"
+ "CTRL, Print, exec, ${screenshot}/bin/screenshot --region"
+ "SHIFT, Print, exec, ${screenshot}/bin/screenshot --clip"
+ "CTRL SHIFT, Print, exec, ${screenshot}/bin/screenshot --region --clip"
+ ]
+ ++ (
+ # workspaces
+ # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
+ builtins.concatLists (builtins.genList (
+ x: let
+ ws = builtins.toString (x + 1);
+ in [
+ "$mod, ${ws}, workspace, ${ws}"
+ "$mod SHIFT, ${ws}, movetoworkspace, ${ws}"
+ "$mod CTRL, ${ws}, movetoworkspacesilent, ${ws}"
+ ]
+ )
+ 8)
+ );
+ # See https://wiki.hyprland.org/Configuring/Monitors/
+ monitor = ",preferred,auto,1";
+ env = [
+ "GDK_SCALE,1"
+ "XCURSOR_SIZE,12"
+ ];
+
+ xwayland = {
+ force_zero_scaling = true;
+ };
+
+ # See https://wiki.hyprland.org/Configuring/Keywords/ for more
+
+ # Execute your favorite apps at launch
+ # exec-once = waybar & hyprpaper & firefox
+
+ # Source a file (multi-file configs)
+ # source = ~/.config/hypr/myColors.conf
+
+ # For all categories, see https://wiki.hyprland.org/Configuring/Variables/
+ input = {
+ kb_layout = "de";
+ kb_variant = "deadacute";
+ kb_model = "";
+ kb_options = "caps:ctrl_modifier";
+ kb_rules = "";
+ repeat_delay = 250;
+ repeat_rate = 30;
+ follow_mouse = 1;
+
+ touchpad = {
+ natural_scroll = "yes";
+ };
+
+ sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
+ };
+
+ general = {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ gaps_in = 5;
+ gaps_out = 10;
+ border_size = 2;
+ "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
+ "col.inactive_border" = "rgba(595959aa)";
+
+ layout = "dwindle";
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false;
+ };
+
+ layerrule = [
+ # blur for wlogout
+ "blur, logout_dialog"
+
+ # blur for swaync
+ "blur, swaync-control-center"
+ "blur, swaync-notification-window"
+ "ignorezero, swaync-control-center"
+ "ignorezero, swaync-notification-window"
+ "ignorealpha 0.5, swaync-control-center"
+ "ignorealpha 0.5, swaync-notification-window"
+ ];
+
+ decoration = {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ rounding = 10;
+
+ blur = {
+ enabled = true;
+ size = 8;
+ passes = 1;
+ new_optimizations = true;
+ };
+ };
+
+ animations = {
+ enabled = "yes";
+
+ # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
+
+ animation = [
+ "windows, 1, 7, myBezier"
+ "windowsOut, 1, 7, default, popin 80%"
+ "border, 1, 10, default"
+ "borderangle, 1, 8, default"
+ "fade, 1, 7, default"
+ "workspaces, 1, 6, default"
+ ];
+ };
+
+ dwindle = {
+ # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
+ pseudotile = "yes"; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+ preserve_split = "yes"; # you probably want this
+ };
+
+ master = {
+ # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
+ # new_is_master = true;
+ };
+
+ ecosystem = {
+ no_update_news = true;
+ };
+
+ misc = {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ force_default_wallpaper = 0; # Set to 0 to disable the anime mascot wallpapers
+ };
+
+ # Example per-device config
+ # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
+ # "device:epic-mouse-v1" = {
+ # sensitivity = -0.5;
+ # };
+ };
+ };
+ };
}
diff --git a/modules/desktop/swaync/icons/bolt.png b/modules/desktop/swaync/icons/bolt.png
new file mode 100644
index 0000000..e0ce40d
Binary files /dev/null and b/modules/desktop/swaync/icons/bolt.png differ
diff --git a/modules/desktop/swaync/icons/brightness-100.png b/modules/desktop/swaync/icons/brightness-100.png
new file mode 100644
index 0000000..e98b793
Binary files /dev/null and b/modules/desktop/swaync/icons/brightness-100.png differ
diff --git a/modules/desktop/swaync/icons/brightness-20.png b/modules/desktop/swaync/icons/brightness-20.png
new file mode 100644
index 0000000..0edf2ba
Binary files /dev/null and b/modules/desktop/swaync/icons/brightness-20.png differ
diff --git a/modules/desktop/swaync/icons/brightness-40.png b/modules/desktop/swaync/icons/brightness-40.png
new file mode 100644
index 0000000..681583b
Binary files /dev/null and b/modules/desktop/swaync/icons/brightness-40.png differ
diff --git a/modules/desktop/swaync/icons/brightness-60.png b/modules/desktop/swaync/icons/brightness-60.png
new file mode 100644
index 0000000..a9ea001
Binary files /dev/null and b/modules/desktop/swaync/icons/brightness-60.png differ
diff --git a/modules/desktop/swaync/icons/brightness-80.png b/modules/desktop/swaync/icons/brightness-80.png
new file mode 100644
index 0000000..8345d21
Binary files /dev/null and b/modules/desktop/swaync/icons/brightness-80.png differ
diff --git a/modules/desktop/swaync/icons/gamemode.png b/modules/desktop/swaync/icons/gamemode.png
new file mode 100644
index 0000000..ed5c3d2
Binary files /dev/null and b/modules/desktop/swaync/icons/gamemode.png differ
diff --git a/modules/desktop/swaync/icons/microphone-mute.png b/modules/desktop/swaync/icons/microphone-mute.png
new file mode 100644
index 0000000..8c1ab7a
Binary files /dev/null and b/modules/desktop/swaync/icons/microphone-mute.png differ
diff --git a/modules/desktop/swaync/icons/microphone.png b/modules/desktop/swaync/icons/microphone.png
new file mode 100644
index 0000000..ab43784
Binary files /dev/null and b/modules/desktop/swaync/icons/microphone.png differ
diff --git a/modules/desktop/swaync/icons/music.png b/modules/desktop/swaync/icons/music.png
new file mode 100644
index 0000000..fe02df3
Binary files /dev/null and b/modules/desktop/swaync/icons/music.png differ
diff --git a/modules/desktop/swaync/icons/palette.png b/modules/desktop/swaync/icons/palette.png
new file mode 100644
index 0000000..552ae1d
Binary files /dev/null and b/modules/desktop/swaync/icons/palette.png differ
diff --git a/modules/desktop/swaync/icons/picture.png b/modules/desktop/swaync/icons/picture.png
new file mode 100644
index 0000000..21a5541
Binary files /dev/null and b/modules/desktop/swaync/icons/picture.png differ
diff --git a/modules/desktop/swaync/icons/play.png b/modules/desktop/swaync/icons/play.png
new file mode 100644
index 0000000..d5b448b
Binary files /dev/null and b/modules/desktop/swaync/icons/play.png differ
diff --git a/modules/desktop/swaync/icons/timer.png b/modules/desktop/swaync/icons/timer.png
new file mode 100644
index 0000000..1e80912
Binary files /dev/null and b/modules/desktop/swaync/icons/timer.png differ
diff --git a/modules/desktop/swaync/icons/volume-high.png b/modules/desktop/swaync/icons/volume-high.png
new file mode 100644
index 0000000..908af2a
Binary files /dev/null and b/modules/desktop/swaync/icons/volume-high.png differ
diff --git a/modules/desktop/swaync/icons/volume-low.png b/modules/desktop/swaync/icons/volume-low.png
new file mode 100644
index 0000000..26ff46f
Binary files /dev/null and b/modules/desktop/swaync/icons/volume-low.png differ
diff --git a/modules/desktop/swaync/icons/volume-mid.png b/modules/desktop/swaync/icons/volume-mid.png
new file mode 100644
index 0000000..3159ed5
Binary files /dev/null and b/modules/desktop/swaync/icons/volume-mid.png differ
diff --git a/modules/desktop/swaync/icons/volume-mute.png b/modules/desktop/swaync/icons/volume-mute.png
new file mode 100644
index 0000000..e99b2b2
Binary files /dev/null and b/modules/desktop/swaync/icons/volume-mute.png differ
diff --git a/modules/desktop/swaync/icons/wand.png b/modules/desktop/swaync/icons/wand.png
new file mode 100644
index 0000000..f06223c
Binary files /dev/null and b/modules/desktop/swaync/icons/wand.png differ
diff --git a/modules/desktop/swaync/swaync.nix b/modules/desktop/swaync/swaync.nix
new file mode 100644
index 0000000..28fe903
--- /dev/null
+++ b/modules/desktop/swaync/swaync.nix
@@ -0,0 +1,111 @@
+{
+ flake.homeModules.swaync = {pkgs, ...}: {
+ xdg.enable = true;
+ xdg.configFile = {
+ "swaync/themes" = {
+ source = ./themes;
+ };
+ "swaync/icons" = {
+ source = ./icons;
+ recursive = true;
+ };
+ };
+ services.swaync.enable = true;
+ services.swaync.style = ''
+ @import 'themes/nova-dark/notifications.css';
+ @import 'themes/nova-dark/central_control.css';
+ '';
+ services.swaync.settings = {
+ positionX = "right";
+ positionY = "top";
+ cssPriority = "user";
+
+ control-center-width = 380;
+ control-center-height = 860;
+ control-center-margin-top = 2;
+ control-center-margin-bottom = 2;
+ control-center-margin-right = 1;
+ control-center-margin-left = 0;
+
+ notification-window-width = 400;
+ notification-icon-size = 48;
+ notification-body-image-height = 160;
+ notification-body-image-width = 200;
+
+ timeout = 4;
+ timeout-low = 2;
+ timeout-critical = 6;
+
+ fit-to-screen = false;
+ keyboard-shortcuts = true;
+ image-visibility = "when-available";
+ transition-time = 200;
+ hide-on-clear = false;
+ hide-on-action = false;
+ script-fail-notify = true;
+ scripts = {
+ example-script = {
+ exec = "echo 'Do something...'";
+ urgency = "Normal";
+ };
+ };
+ notification-visibility = {
+ example-name = {
+ state = "muted";
+ urgency = "Low";
+ app-name = "Spotify";
+ };
+ };
+ widgets = [
+ "label"
+ "buttons-grid"
+ "mpris"
+ "title"
+ "dnd"
+ "notifications"
+ ];
+ widget-config = {
+ title = {
+ text = "Notifications";
+ clear-all-button = true;
+ button-text = " ";
+ };
+ dnd = {
+ text = "Do not disturb";
+ };
+ label = {
+ max-lines = 1;
+ text = " ";
+ };
+ mpris = {
+ image-size = 96;
+ image-radius = 12;
+ };
+ volume = {
+ label = "";
+ show-per-app = true;
+ };
+ buttons-grid = {
+ actions = [
+ {
+ label = " ";
+ command = "${pkgs.alsa-utils}/bin/amixer set Master toggle";
+ }
+ {
+ label = "";
+ command = "${pkgs.alsa-utils}/bin/amixer set Capture toggle";
+ }
+ {
+ label = " ";
+ command = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
+ }
+ {
+ label = "";
+ command = "${pkgs.blueman}/bin/blueman-manager";
+ }
+ ];
+ };
+ };
+ };
+ };
+}
diff --git a/modules/desktop/swaync/themes/nova-dark/central_control.css b/modules/desktop/swaync/themes/nova-dark/central_control.css
new file mode 100644
index 0000000..361784a
--- /dev/null
+++ b/modules/desktop/swaync/themes/nova-dark/central_control.css
@@ -0,0 +1,258 @@
+@define-color text @foreground;
+@define-color background-alt alpha(@color1, .4);
+@define-color selected @color6;
+@define-color hover alpha(@selected, .4);
+@define-color urgent @color2;
+
+/* Temporary color defs */
+@define-color background rgb(0,10,20);
+@define-color background-alt rgb(0,20,30);
+@define-color selected rgb(0,30,130);
+
+* {
+ color: @text;
+
+ all: unset;
+ font-size: 14px;
+ /*font-family: "JetBrains Mono Nerd Font 10";*/
+ transition: 200ms;
+
+}
+
+/* Avoid 'annoying' backgroud */
+.blank-window {
+ background: transparent;
+}
+
+/* CONTROL CENTER ------------------------------------------------------------------------ */
+
+.control-center {
+ background: alpha(@background, .55);
+ border-radius: 24px;
+ border: 1px solid @selected;
+ box-shadow: 0 0 10px 0 rgba(0,0,0,.6);
+ margin: 18px;
+ padding: 12px;
+}
+
+/* Notifications */
+.control-center .notification-row .notification-background,
+.control-center .notification-row .notification-background .notification.critical {
+ background-color: @background-alt;
+ border-radius: 16px;
+ margin: 4px 0px;
+ padding: 4px;
+}
+
+.control-center .notification-row .notification-background .notification.critical {
+ color: @urgent;
+}
+
+.control-center .notification-row .notification-background .notification .notification-content {
+ margin: 6px;
+ padding: 8px 6px 2px 2px;
+}
+
+.control-center .notification-row .notification-background .notification > *:last-child > * {
+ min-height: 3.4em;
+}
+
+.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
+ background: alpha(@selected, .6);
+ color: @text;
+ border-radius: 12px;
+ margin: 6px;
+}
+
+.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
+ background: @selected;
+}
+
+.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
+ background-color: @selected;
+}
+
+/* Buttons */
+
+.control-center .notification-row .notification-background .close-button {
+ background: transparent;
+ border-radius: 6px;
+ color: @text;
+ margin: 0px;
+ padding: 4px;
+}
+
+.control-center .notification-row .notification-background .close-button:hover {
+ background-color: @selected;
+}
+
+.control-center .notification-row .notification-background .close-button:active {
+ background-color: @selected;
+}
+
+progressbar,
+progress,
+trough {
+ border-radius: 12px;
+}
+
+progressbar {
+ background-color: rgba(255,255,255,.1);
+}
+
+/* Notifications expanded-group */
+
+.notification-group {
+ margin: 2px 8px 2px 8px;
+
+}
+.notification-group-headers {
+ font-weight: bold;
+ font-size: 1.25rem;
+ color: @text;
+ letter-spacing: 2px;
+}
+
+.notification-group-icon {
+ color: @text;
+}
+
+.notification-group-collapse-button,
+.notification-group-close-all-button {
+ background: transparent;
+ color: @text;
+ margin: 4px;
+ border-radius: 6px;
+ padding: 4px;
+}
+
+.notification-group-collapse-button:hover,
+.notification-group-close-all-button:hover {
+ background: @hover;
+}
+
+/* WIDGETS --------------------------------------------------------------------------- */
+
+ /* Notification clear button */
+.widget-title {
+ font-size: 1.2em;
+ margin: 6px;
+}
+
+.widget-title button {
+ background: @background-alt;
+ border-radius: 6px;
+ padding: 4px 16px;
+}
+
+.widget-title button:hover {
+ background-color: @hover;
+}
+
+.widget-title button:active {
+ background-color: @selected;
+}
+
+ /* Do not disturb */
+.widget-dnd {
+ margin: 6px;
+ font-size: 1.2rem;
+}
+
+.widget-dnd > switch {
+ background: @background-alt;
+ font-size: initial;
+ border-radius: 8px;
+ box-shadow: none;
+ padding: 2px;
+}
+
+.widget-dnd > switch:hover {
+ background: @hover;
+}
+
+.widget-dnd > switch:checked {
+ background: @selected;
+}
+
+.widget-dnd > switch:checked:hover {
+ background: @hover;
+}
+
+.widget-dnd > switch slider {
+ background: @text;
+ border-radius: 6px;
+}
+
+ /* Buttons menu */
+.widget-buttons-grid {
+ font-size: x-large;
+ padding: 6px 2px;
+ margin: 6px;
+ border-radius: 12px;
+ background: @background-alt;
+}
+
+.widget-buttons-grid>flowbox>flowboxchild>button {
+ margin: 4px 10px;
+ padding: 6px 12px;
+ background: transparent;
+ border-radius: 8px;
+}
+
+.widget-buttons-grid>flowbox>flowboxchild>button:hover {
+ background: @hover;
+}
+
+
+ /* Music player */
+.widget-mpris {
+ background: @background-alt;
+ border-radius: 16px;
+ color: @text;
+ margin: 20px 6px;
+}
+
+ /* NOTE: Background need *opacity 1* otherwise will turn into the album art blurred */
+.widget-mpris-player {
+ background-color: @background-sec;
+ border-radius: 22px;
+ padding: 6px 14px;
+ margin: 6px;
+}
+
+.widget-mpris > box > button {
+ color: @text;
+ border-radius: 20px;
+}
+
+.widget-mpris button {
+ color: alpha(@text, .6);
+}
+
+.widget-mpris button:hover {
+ color: @text;
+}
+
+.widget-mpris-album-art {
+ border-radius: 16px;
+}
+
+.widget-mpris-title {
+ font-weight: 700;
+ font-size: 1rem;
+}
+
+.widget-mpris-subtitle {
+ font-weight: 500;
+ font-size: 0.8rem;
+}
+
+/* Volume */
+.widget-volume {
+ background: @background-sec;
+ color: @background;
+ padding: 4px;
+ margin: 6px;
+ border-radius: 6px;
+}
diff --git a/modules/desktop/swaync/themes/nova-dark/notifications.css b/modules/desktop/swaync/themes/nova-dark/notifications.css
new file mode 100644
index 0000000..1e898a8
--- /dev/null
+++ b/modules/desktop/swaync/themes/nova-dark/notifications.css
@@ -0,0 +1,115 @@
+@define-color text @foreground;
+@define-color background-alt @color1;
+@define-color selected @color3;
+@define-color hover @color5;
+@define-color urgent @color2;
+/* Temporary color defs */
+@define-color background rgb(0,10,20);
+@define-color background-alt rgb(0,20,30);
+@define-color selected rgb(0,30,130);
+
+* {
+
+ /*background-alt: @color1; Buttons background */
+ /*selected: @color2; Button selected */
+ /*hover: @color5; Hover button */
+ /*urgent: @color6; Urgency critical */
+ /*text-selected: @background; */
+
+ color: @text;
+
+ all: unset;
+ font-size: 14px;
+ font-family: "JetBrains Mono Nerd Font 10";
+ transition: 200ms;
+
+}
+
+.notification-row {
+ outline: none;
+ margin: 0;
+ padding: 0px;
+}
+
+.floating-notifications.background .notification-row .notification-background {
+ background: alpha(@background, .55);
+ box-shadow: 0 0 8px 0 rgba(0,0,0,.6);
+ border: 1px solid @selected;
+ border-radius: 24px;
+ margin: 16px;
+ padding: 0;
+}
+
+.floating-notifications.background .notification-row .notification-background .notification {
+ padding: 6px;
+ border-radius: 12px;
+}
+
+.floating-notifications.background .notification-row .notification-background .notification.critical {
+ border: 2px solid @urgent;
+}
+
+.floating-notifications.background .notification-row .notification-background .notification .notification-content {
+ margin: 14px;
+}
+
+.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: 8px;
+ background-color: @background-alt ;
+ margin: 6px;
+ border: 1px solid transparent;
+}
+
+.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
+ background-color: @hover;
+ border: 1px solid @selected;
+}
+
+.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
+ background-color: @selected;
+ color: @background;
+}
+
+.image {
+ margin: 10px 20px 10px 0px;
+}
+
+.summary {
+ font-weight: 800;
+ font-size: 1rem;
+}
+
+.body {
+ font-size: 0.8rem;
+}
+
+.floating-notifications.background .notification-row .notification-background .close-button {
+ margin: 6px;
+ padding: 2px;
+ border-radius: 6px;
+ background-color: transparent;
+ border: 1px solid transparent;
+}
+
+.floating-notifications.background .notification-row .notification-background .close-button:hover {
+ background-color: @selected;
+}
+
+.floating-notifications.background .notification-row .notification-background .close-button:active {
+ background-color: @selected;
+ color: @background;
+}
+
+.notification.critical progress {
+ background-color: @selected;
+}
+
+.notification.low progress,
+.notification.normal progress {
+ background-color: @selected;
+}
+
diff --git a/modules/desktop/waybar.nix b/modules/desktop/waybar.nix
new file mode 100644
index 0000000..367da48
--- /dev/null
+++ b/modules/desktop/waybar.nix
@@ -0,0 +1,261 @@
+{
+ flake.homeModules.waybar = {
+ config,
+ lib,
+ pkgs,
+ ...
+ }: {
+ programs.waybar.enable = true;
+ programs.waybar.systemd.enable = true;
+
+ services.blueman-applet.enable = true;
+ services.network-manager-applet.enable = true;
+ services.pasystray.enable = true;
+
+ # is already fixed on latest home-manager rev
+ systemd.user.services = {
+ blueman-applet.Unit.After = lib.mkForce ["graphical-session.target"];
+ network-manager-applet.Unit.After = lib.mkForce ["graphical-session.target"];
+ pasystray.Unit.After = lib.mkForce ["graphical-session.target"];
+ waybar.Unit.After = lib.mkForce ["graphical-session.target"];
+ };
+
+ home.packages = with pkgs; [
+ pulsemixer
+ pavucontrol
+ networkmanagerapplet
+ ];
+
+ programs.waybar = {
+ settings.mainBar = {
+ position = "top";
+ layer = "top";
+ height = 5;
+ margin-top = 0;
+ margin-bottom = 0;
+ margin-left = 0;
+ margin-right = 0;
+ modules-left = [
+ "custom/launcher"
+ "hyprland/workspaces"
+ ];
+ modules-center = [
+ "hyprland/window"
+ ];
+ modules-right = [
+ "clock"
+ "cpu"
+ "memory"
+ "disk"
+ "battery"
+ "network"
+ "tray"
+ ];
+ clock = {
+ calendar = {
+ format = {today = "{}";};
+ };
+ format = " {:%H:%M}";
+ tooltip = "true";
+ tooltip-format = "{:%Y %B}\n{calendar}";
+ format-alt = " {:%d/%m}";
+ };
+ "hyprland/workspaces" = {
+ active-only = false;
+ disable-scroll = true;
+ format = "{icon}";
+ on-click = "activate";
+ format-icons = {
+ "1" = "1";
+ "2" = "2";
+ "3" = "3";
+ "4" = "4";
+ "5" = "5";
+ "6" = "6";
+ "7" = "7";
+ "8" = "8";
+ urgent = "";
+ default = "";
+ sort-by-number = true;
+ };
+ persistent-workspaces = {
+ "1" = [];
+ "2" = [];
+ "3" = [];
+ "4" = [];
+ "5" = [];
+ "6" = [];
+ "7" = [];
+ "8" = [];
+ };
+ };
+ memory = {
+ format = " {}%";
+ format-alt = " {used} GiB"; #
+ interval = 2;
+ };
+ cpu = {
+ format = " {usage}%";
+ format-alt = " {avg_frequency} GHz";
+ interval = 2;
+ };
+ disk = {
+ # path = "/";
+ format = " {percentage_used}%";
+ interval = 60;
+ };
+ network = {
+ format-wifi = " {signalStrength}%";
+ format-ethernet = " ";
+ tooltip-format = "Connected to {essid} {ifname} via {gwaddr}";
+ format-linked = "{ifname} (No IP)";
+ format-disconnected = " ";
+ };
+ tray = {
+ icon-size = 20;
+ spacing = 8;
+ };
+ pulseaudio = {
+ format = "{icon} {volume}%";
+ format-muted = " {volume}%";
+ format-icons = {
+ default = [" "];
+ };
+ scroll-step = 5;
+ on-click = "pamixer -t";
+ };
+ battery = {
+ format = "{icon} {capacity}%";
+ format-icons = [" " " " " " " " " "];
+ format-charging = " {capacity}%";
+ format-full = " {capacity}%";
+ format-warning = " {capacity}%";
+ interval = 5;
+ states = {
+ warning = 20;
+ };
+ format-time = "{H}h{M}m";
+ tooltip = true;
+ tooltip-format = "{time}";
+ };
+ "custom/launcher" = {
+ format = "";
+ on-click = "${pkgs.wofi}/bin/wofi --show drun";
+ tooltip = "false";
+ };
+ };
+ style = ''
+ * {
+ border: none;
+ font-family: Font Awesome, Roboto, Arial, sans-serif;
+ font-size: 13px;
+ color: #ffffff;
+ border-radius: 15px;
+ }
+
+ window {
+ /*font-weight: bold;*/
+ }
+ window#waybar {
+ border-style: none;
+ border-width: 1px;
+ border-color: #33ccff;
+ background: rgba(0, 0, 0, 0);
+ }
+ /*-----module groups----*/
+ .modules-right {
+ background-color: rgba(0,43,51,0.85);
+ margin: 2px 10px 2px 0;
+ }
+ .modules-left {
+ margin: 2px 0 2px 5px;
+ background-color: rgba(0,119,179,0.6);
+ }
+ /*-----modules indv----*/
+ #workspaces button {
+ padding: 1px 5px;
+ background-color: transparent;
+ }
+ #workspaces button:hover {
+ box-shadow: inherit;
+ background-color: rgba(0,153,153,1);
+ }
+ #workspaces button.empty {
+ color: rgba(0 ,40, 40, 40);
+ }
+ #workspaces button.active {
+ background-color: rgba(0,43,51,0.85);
+ }
+ #window {
+ border-style: solid;
+ background-color: rgba(0,43,51,0.5);
+ margin: 2px 5px;
+ padding: 2px 5px;
+ border-width: 1px;
+ border-color: #33ccff;
+ }
+ #window.empty {
+ border-style: none;
+ background-color: transparent;
+ }
+ #custom-launcher {
+ background-color: rgba(0,119,179,0.6);
+ border-radius: 100px;
+ margin: 5px 5px;
+ }
+
+ #clock,
+ #battery,
+ #cpu,
+ #memory,
+ #temperature,
+ #network,
+ #pulseaudio,
+ #custom-media,
+ #tray,
+ #mode,
+ #custom-power,
+ #custom-menu,
+ #idle_inhibitor {
+ padding: 0 10px;
+ }
+ #mode {
+ color: #cc3436;
+ font-weight: bold;
+ }
+ #custom-power {
+ background-color: rgba(0,119,179,0.6);
+ border-radius: 100px;
+ margin: 5px 5px;
+ padding: 1px 1px 1px 6px;
+ }
+ /*-----Indicators----*/
+ #idle_inhibitor.activated {
+ color: #2dcc36;
+ }
+ #pulseaudio.muted {
+ color: #cc3436;
+ }
+ #battery.charging {
+ color: #2dcc36;
+ }
+ #battery.warning:not(.charging) {
+ color: #e6e600;
+ }
+ #battery.critical:not(.charging) {
+ color: #cc3436;
+ }
+ #temperature.critical {
+ color: #cc3436;
+ }
+ /*-----Colors----*/
+ /*
+ *rgba(0,85,102,1),#005566 --> Indigo(dye)
+ *rgba(0,43,51,1),#002B33 --> Dark Green
+ *RGBA(0,153,153,1),#009999 --> PERSIAN GREEN
+ *
+ */
+ '';
+ };
+ };
+}
diff --git a/modules/overlays/unstable.nix b/modules/overlays/unstable.nix
index 3cb2730..21ea4ec 100644
--- a/modules/overlays/unstable.nix
+++ b/modules/overlays/unstable.nix
@@ -1,4 +1,18 @@
-{inputs, ...}: {
+{
+ inputs,
+ self,
+ ...
+}: {
+ flake.nixosModules.unstable-overlay = {
+ nixpkgs.overlays = [
+ self.overlays.unstable
+ ];
+ };
+ flake.homeModules.unstable-overlay = {
+ nixpkgs.overlays = [
+ self.overlays.unstable
+ ];
+ };
flake.overlays.unstable = final: prev: {
unstable = import inputs.nixpkgs-unstable {
system = prev.system;
diff --git a/modules/packages/bulk-transcode/default.nix b/modules/packages/bulk-transcode/default.nix
index d6106da..ca3cca8 100644
--- a/modules/packages/bulk-transcode/default.nix
+++ b/modules/packages/bulk-transcode/default.nix
@@ -1,7 +1,10 @@
-{
+{self, ...}: {
flake.overlays.bulk-transcode = final: prev: {
bulk-transcode = final.callPackage ./_derivation.nix {};
};
+ flake.nixosModules.bulk-transcode-overlay = {
+ nixpkgs.overlays = [self.overlays.bulk-transcode];
+ };
perSystem = {pkgs, ...}: {
packages.bulk-transcode = pkgs.callPackage ./_derivation.nix {};
devShells.bulk-transcode = import ./_shell.nix {inherit pkgs;};
diff --git a/modules/packages/layan-qt6/default.nix b/modules/packages/layan-qt6/default.nix
deleted file mode 100644
index cd0a9e2..0000000
--- a/modules/packages/layan-qt6/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- flake.overlays.layan-qt6 = final: prev: {
- crossover = final.callPackage ./_derivation.nix {};
- };
- perSystem = {pkgs, ...}: {
- packages.layan-qt6 = pkgs.callPackage ./_derivation.nix {};
- };
-}
diff --git a/modules/packages/layan-qt6/_derivation.nix b/modules/themes/layan/_derivation.nix
similarity index 100%
rename from modules/packages/layan-qt6/_derivation.nix
rename to modules/themes/layan/_derivation.nix
diff --git a/modules/themes/layan/layan-qt6.nix b/modules/themes/layan/layan-qt6.nix
new file mode 100644
index 0000000..23e947e
--- /dev/null
+++ b/modules/themes/layan/layan-qt6.nix
@@ -0,0 +1,18 @@
+{self, ...}: {
+ flake.homeModules.layan-qt6-overlay = {
+ nixpkgs.overlays = [
+ self.overlays.layan-qt6
+ ];
+ };
+ flake.nixosModules.layan-qt6-overlay = {
+ nixpkgs.overlays = [
+ self.overlays.layan-qt6
+ ];
+ };
+ flake.overlays.layan-qt6 = final: prev: {
+ layan-qt6 = final.kdePackages.callPackage ./_derivation.nix {};
+ };
+ perSystem = {pkgs, ...}: {
+ packages.layan-qt6 = pkgs.callPackage ./_derivation.nix {};
+ };
+}
diff --git a/modules/themes/layan/layan.nix b/modules/themes/layan/layan.nix
new file mode 100644
index 0000000..bbdcb54
--- /dev/null
+++ b/modules/themes/layan/layan.nix
@@ -0,0 +1,48 @@
+{self, ...}: {
+ flake.homeModules.layan = {
+ lib,
+ pkgs,
+ ...
+ }: {
+ imports = [
+ self.homeModules.layan-qt6-overlay
+ self.homeModules.unstable-overlay
+ ];
+ home.packages = [
+ pkgs.layan-qt6
+ pkgs.kdePackages.qtstyleplugin-kvantum
+ pkgs.unstable.layan-cursors
+ pkgs.layan-gtk-theme
+ pkgs.tela-circle-icon-theme
+ ];
+
+ qt.enable = false;
+ qt.style.name = "kvantum";
+ qt.style.package = pkgs.kdePackages.qtstyleplugin-kvantum;
+ qt.platformTheme.name = "gtk";
+ systemd.user.settings.Manager.DefaultEnvironment = lib.mapAttrs (_: lib.mkDefault) {
+ QT_STYLE_OVERRIDE = "kvantum";
+ QT_QPA_PLATFORMTHEME = "gtk";
+ };
+ xdg.configFile."Kvantum/kvantum.kvconfig".text = lib.generators.toINI {} {
+ General.theme = "LayanDark";
+ };
+
+ # add nord like gtk theme
+ gtk = {
+ enable = true;
+ cursorTheme = {
+ package = pkgs.unstable.layan-cursors;
+ name = "Layan-cursors";
+ };
+ theme = {
+ package = pkgs.layan-gtk-theme;
+ name = "Layan-Dark";
+ };
+ iconTheme = {
+ package = pkgs.tela-circle-icon-theme;
+ name = "Tela-circle-dark";
+ };
+ };
+ };
+}
diff --git a/old/static/keys/borg-jonas@comfy-station.pub b/static/keys/borg-jonas@comfy-station.pub
similarity index 100%
rename from old/static/keys/borg-jonas@comfy-station.pub
rename to static/keys/borg-jonas@comfy-station.pub
diff --git a/old/static/keys/my_pub.asc b/static/keys/my_pub.asc
similarity index 100%
rename from old/static/keys/my_pub.asc
rename to static/keys/my_pub.asc
diff --git a/old/static/keys/passgit-jonas@comfy-station.pub b/static/keys/passgit-jonas@comfy-station.pub
similarity index 100%
rename from old/static/keys/passgit-jonas@comfy-station.pub
rename to static/keys/passgit-jonas@comfy-station.pub
diff --git a/old/static/wallpaper/nord.png b/static/wallpaper/nord.png
similarity index 100%
rename from old/static/wallpaper/nord.png
rename to static/wallpaper/nord.png
diff --git a/old/static/wallpaper/stones.jpg b/static/wallpaper/stones.jpg
similarity index 100%
rename from old/static/wallpaper/stones.jpg
rename to static/wallpaper/stones.jpg