aboutsummaryrefslogtreecommitdiff
path: root/modules/desktop
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
commita45c4551712c1ba5cb82eaf290f311ab0e8690e4 (patch)
treef62b23489fb31f8ea58fef77f99619efd784eb36 /modules/desktop
big changes
Diffstat (limited to 'modules/desktop')
-rw-r--r--modules/desktop/home/default.nix14
-rw-r--r--modules/desktop/home/environments/gnome/default.nix67
-rw-r--r--modules/desktop/home/environments/hyprland/default.nix14
-rw-r--r--modules/desktop/home/environments/hyprland/dunst.nix44
-rw-r--r--modules/desktop/home/environments/hyprland/fuzzel.nix44
-rw-r--r--modules/desktop/home/environments/hyprland/hyprland/catppuccin.conf79
-rw-r--r--modules/desktop/home/environments/hyprland/hyprland/default.nix96
-rw-r--r--modules/desktop/home/environments/hyprland/hyprland/wallpaper.jpgbin0 -> 169046 bytes
-rw-r--r--modules/desktop/home/environments/hyprland/waybar/catppuccin.scss26
-rw-r--r--modules/desktop/home/environments/hyprland/waybar/config.nix59
-rw-r--r--modules/desktop/home/environments/hyprland/waybar/default.nix20
-rw-r--r--modules/desktop/home/environments/hyprland/waybar/power_menu.xml23
-rw-r--r--modules/desktop/home/environments/hyprland/waybar/style.scss86
-rw-r--r--modules/desktop/home/gtk/adwaita.nix33
-rw-r--r--modules/desktop/home/gtk/catppuccin.nix33
-rw-r--r--modules/desktop/home/gtk/default.nix26
-rw-r--r--modules/desktop/home/programs/firefox/adwaita.nix25
-rw-r--r--modules/desktop/home/programs/firefox/catppuccin.nix20
-rw-r--r--modules/desktop/home/programs/firefox/default.nix17
-rw-r--r--modules/desktop/home/programs/firefox/profile.nix38
-rw-r--r--modules/desktop/home/programs/musescore.nix13
-rw-r--r--modules/desktop/options.nix67
-rw-r--r--modules/desktop/system/components/dunst.nix38
-rw-r--r--modules/desktop/system/components/fuzzel.nix50
-rw-r--r--modules/desktop/system/default.nix12
-rw-r--r--modules/desktop/system/environments/gnome.nix67
-rw-r--r--modules/desktop/system/environments/sway.nix103
-rw-r--r--modules/desktop/system/programs/firefox.nix36
-rw-r--r--modules/desktop/system/programs/foot.nix64
29 files changed, 1214 insertions, 0 deletions
diff --git a/modules/desktop/home/default.nix b/modules/desktop/home/default.nix
new file mode 100644
index 0000000..47d8687
--- /dev/null
+++ b/modules/desktop/home/default.nix
@@ -0,0 +1,14 @@
+let
+ findPrograms =
+ builtins.attrValues
+ (builtins.mapAttrs
+ (file: type: ./programs/${file})
+ (builtins.readDir ./programs));
+in {
+ imports =
+ [
+ ./environments/gnome
+ ./gtk
+ ]
+ ++ findPrograms;
+}
diff --git a/modules/desktop/home/environments/gnome/default.nix b/modules/desktop/home/environments/gnome/default.nix
new file mode 100644
index 0000000..9b248ea
--- /dev/null
+++ b/modules/desktop/home/environments/gnome/default.nix
@@ -0,0 +1,67 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.gnome;
+in
+ lib.mkIf cfg.enable {
+ home.packages = with pkgs.gnomeExtensions; [
+ blur-my-shell
+ dash-to-dock
+ ];
+
+ dconf = {
+ enable = true;
+ settings = {
+ "org/gnome/mutter" = {
+ workspaces-only-on-primary = false;
+ };
+ "org/gnome/shell/app-switcher" = {
+ current-workspace-only = true;
+ };
+
+ # Idle settings
+ "org/gnome/desktop/session" = {
+ idle-delay = 0;
+ };
+ "org/gnome/settings-daemon/plugins/power" = {
+ sleep-inactive-ac-type = "nothing";
+ };
+
+ # Keybindings
+ "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
+ binding = "<Super>Return";
+ command = "blackbox";
+ name = "Terminal";
+ };
+ "org/gnome/settings-daemon/plugins/media-keys" = {
+ custom-keybindings = [
+ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
+ ];
+ };
+
+ # Background
+ "org/gnome/desktop/background" = rec {
+ picture-uri = "file://${pkgs.gnome-backgrounds}/share/backgrounds/gnome/blobs-d.svg";
+ picture-uri-dark = picture-uri;
+ };
+
+ # Extensions
+ "org/gnome/shell" = {
+ disable-user-extensions = false;
+ enabled-extensions = with pkgs.gnomeExtensions; [
+ blur-my-shell.extensionUuid
+ dash-to-dock.extensionUuid
+ ];
+ };
+
+ "org/gnome/shell/extensions/dash-to-dock" = {
+ dash-max-icon-size = 48;
+ show-trash = false;
+ show-mounts = false;
+ };
+ };
+ };
+ }
diff --git a/modules/desktop/home/environments/hyprland/default.nix b/modules/desktop/home/environments/hyprland/default.nix
new file mode 100644
index 0000000..85abeaa
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/default.nix
@@ -0,0 +1,14 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.hyprland;
+in {
+ imports = [
+ ./hyprland
+ ./dunst.nix
+ ./fuzzel.nix
+ ./waybar
+ ];
+}
diff --git a/modules/desktop/home/environments/hyprland/dunst.nix b/modules/desktop/home/environments/hyprland/dunst.nix
new file mode 100644
index 0000000..6a5a0d1
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/dunst.nix
@@ -0,0 +1,44 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.hyprland.components.dunst;
+in
+ lib.mkIf cfg.enable {
+ services.dunst = {
+ enable = true;
+ settings = lib.mkMerge [
+ {
+ global = {
+ offset = "8x30";
+ origin = "top-right";
+ transparency = 10;
+ font = "Iosevka Nerd Font";
+ };
+ }
+ (lib.mkIf (cfg.theme == "catppuccin") {
+ global = {
+ frame_color = "#89b4fa";
+ highlight = "#89b4fa";
+ };
+
+ urgency_low = {
+ background = "#1e1e2e";
+ foreground = "#cdd6f4";
+ };
+
+ urgency_normal = {
+ background = "#1e1e2e";
+ foreground = "#cdd6f4";
+ };
+
+ urgency_critical = {
+ background = "#1e1e2e";
+ foreground = "#cdd6f4";
+ frame_color = "#fab387";
+ };
+ })
+ ];
+ };
+ }
diff --git a/modules/desktop/home/environments/hyprland/fuzzel.nix b/modules/desktop/home/environments/hyprland/fuzzel.nix
new file mode 100644
index 0000000..6dca3fb
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/fuzzel.nix
@@ -0,0 +1,44 @@
+{
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.hyprland.components.fuzzel;
+in
+ lib.mkIf cfg.enable {
+ programs.fuzzel = {
+ enable = true;
+ settings = {
+ main = {
+ prompt = " ";
+ dpi-aware = false;
+
+ font = "Iosevka Nerd Font";
+ line-height = 25;
+ lines = 10;
+ width = 30;
+
+ horizontal-pad = 8;
+ vertical-pad = 8;
+ };
+ border = {
+ radius = 0;
+ width = 2;
+ };
+
+ colors = lib.mkIf (cfg.theme == "catppuccin") {
+ background = "1e1e2edd";
+ text = "cdd6f4ff";
+ prompt = "bac2deff";
+ placeholder = "7f849cff";
+ input = "cdd6f4ff";
+ match = "89b4faff";
+ selection = "585b70ff";
+ selection-text = "cdd6f4ff";
+ selection-match = "89b4faff";
+ counter = "7f849cff";
+ border = "89b4faff";
+ };
+ };
+ };
+ }
diff --git a/modules/desktop/home/environments/hyprland/hyprland/catppuccin.conf b/modules/desktop/home/environments/hyprland/hyprland/catppuccin.conf
new file mode 100644
index 0000000..572cb7e
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/hyprland/catppuccin.conf
@@ -0,0 +1,79 @@
+$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
+
+$accent = $mauve
diff --git a/modules/desktop/home/environments/hyprland/hyprland/default.nix b/modules/desktop/home/environments/hyprland/hyprland/default.nix
new file mode 100644
index 0000000..1c3c2b8
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/hyprland/default.nix
@@ -0,0 +1,96 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.hyprland;
+in
+ lib.mkIf cfg.enable {
+ home.file."${config.xdg.configHome}/uwsm/env" = lib.mkIf cfg.useUwsm {
+ text = ''export QT_QPA_PLATFORM=wayland'';
+ };
+
+ home.packages = with pkgs; [wl-clipboard hyprshot brightnessctl];
+
+ wayland.windowManager.hyprland = {
+ enable = true;
+ systemd.enable = !cfg.useUwsm; # conflicts with uwsm
+
+ settings = {
+ source = "${./catppuccin.conf}";
+
+ xwayland.enabled = false; # all of my apps are compatible with wayland
+ general = {
+ "col.active_border" = "$accent";
+ "col.inactive_border" = "$base";
+ border_size = 2;
+ gaps_in = 5;
+ gaps_out = 8;
+ };
+
+ # TODO these should be dependent on what applications are enabled
+ bind =
+ [
+ "Mod4, q, killactive"
+ "Mod4, x, exec, footclient"
+ "Mod4, b, exec, firefox"
+ "Mod4, h, exec, obsidian"
+ "Mod4, SPACE, exec, fuzzel"
+ ]
+ ++ (
+ # workspaces
+ # binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
+ builtins.concatLists (builtins.genList (
+ i: let
+ ws = i + 1;
+ in [
+ "Mod4, code:1${toString i}, workspace, ${toString ws}"
+ "Mod4 SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
+ ]
+ )
+ 9)
+ );
+
+ binde = [
+ ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
+ ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
+
+ ", XF86MonBrightnessUp, exec, brightnessctl s 5%+"
+ ", XF86MonBrightnessDown, exec, brightnessctl s 5%-"
+ ];
+
+ bindm = [
+ "Mod4, mouse:272, movewindow"
+ "Mod4, mouse:273, resizewindow"
+ ];
+
+ monitor = ", prefred, auto, 1";
+ animations = {
+ bezier = [
+ "ease, 0.25, 0.1, 0.25, 1"
+ "menu_decel, 0.1, 1, 0, 1"
+ ];
+ animation = [
+ "workspaces, 1, 2, ease"
+ "workspaces, 1, 7, menu_decel, slidefade 15%"
+ "global, 1, 2.5, ease"
+ "windowsIn, 1, 2.75, ease, slide"
+ "windowsOut, 1.275, ease, slide"
+ ];
+ };
+ misc.disable_hyprland_logo = true;
+ };
+ };
+
+ home.file."Pictures/wallpaper.jpg".source = ./wallpaper.jpg;
+
+ services.hyprpaper = {
+ enable = true;
+ settings = {
+ ipc = false;
+ preload = ["Pictures/wallpaper.jpg"];
+ wallpaper = ",Pictures/wallpaper.jpg";
+ };
+ };
+ }
diff --git a/modules/desktop/home/environments/hyprland/hyprland/wallpaper.jpg b/modules/desktop/home/environments/hyprland/hyprland/wallpaper.jpg
new file mode 100644
index 0000000..039afcc
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/hyprland/wallpaper.jpg
Binary files differ
diff --git a/modules/desktop/home/environments/hyprland/waybar/catppuccin.scss b/modules/desktop/home/environments/hyprland/waybar/catppuccin.scss
new file mode 100644
index 0000000..0eb6a82
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/waybar/catppuccin.scss
@@ -0,0 +1,26 @@
+@define-color rosewater #f5e0dc;
+@define-color flamingo #f2cdcd;
+@define-color pink #f5c2e7;
+@define-color mauve #cba6f7;
+@define-color red #f38ba8;
+@define-color maroon #eba0ac;
+@define-color peach #fab387;
+@define-color yellow #f9e2af;
+@define-color green #a6e3a1;
+@define-color teal #94e2d5;
+@define-color sky #89dceb;
+@define-color sapphire #74c7ec;
+@define-color blue #89b4fa;
+@define-color lavender #b4befe;
+@define-color text #cdd6f4;
+@define-color subtext1 #bac2de;
+@define-color subtext0 #a6adc8;
+@define-color overlay2 #9399b2;
+@define-color overlay1 #7f849c;
+@define-color overlay0 #6c7086;
+@define-color surface2 #585b70;
+@define-color surface1 #45475a;
+@define-color surface0 #313244;
+@define-color base #1e1e2e;
+@define-color mantle #181825;
+@define-color crust #11111b;
diff --git a/modules/desktop/home/environments/hyprland/waybar/config.nix b/modules/desktop/home/environments/hyprland/waybar/config.nix
new file mode 100644
index 0000000..7afa83c
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/waybar/config.nix
@@ -0,0 +1,59 @@
+{pkgs, ...}: {
+ spacing = 4;
+ modules-left = ["custom/launcher" "hyprland/workspaces"];
+ modules-center = ["hyprland/window"];
+ modules-right = ["bluetooth" "wireplumber" "battery" "clock" "custom/power"];
+
+ "custom/launcher" = {
+ format = " ";
+ on-click = "${pkgs.fuzzel}/bin/fuzzel";
+ };
+ "hyprland/workspaces" = {
+ disable-scroll = true;
+ all-outputs = true;
+ warp-on-scroll = false;
+ format = "{icon}";
+ format-icons = {
+ "1" = "";
+ "2" = "󰈹";
+ "3" = "󰝚";
+ "4" = "󰎚";
+ "5" = "";
+ };
+ };
+ "hyprland/window" = {
+ on-click = "hyprctl dispatch float";
+ };
+ "bluetooth" = {
+ format = "";
+ format-connected = "󰂯 {device_alias}";
+ };
+ "battery" = {
+ format = "{icon} {capacity}%";
+ format-alt = "{icon}";
+ format-icons = [" " " " " " " " " "];
+ };
+ "wireplumber" = {
+ format = "{icon} {volume}%";
+ format-alt = "{icon}";
+ format-muted = "󰖁 {volume}%";
+ format-icons.default = ["󰕿" "󰖀" "󰕾"];
+ tooltip = false;
+ };
+ "clock" = {
+ format = "{:%I:%M}";
+ format-alt = "/{:%Y/%b/%d-%a}";
+ tooltip = false;
+ };
+ "custom/power" = {
+ format = " collin";
+ tooltip = false;
+ menu = "on-click";
+ menu-file = "${./power_menu.xml}";
+ menu-actions = {
+ logout = "hyprctl dispatch exit";
+ reboot = "reboot";
+ shutdown = "poweroff";
+ };
+ };
+}
diff --git a/modules/desktop/home/environments/hyprland/waybar/default.nix b/modules/desktop/home/environments/hyprland/waybar/default.nix
new file mode 100644
index 0000000..3b73a78
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/waybar/default.nix
@@ -0,0 +1,20 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.hyprland.components.waybar;
+in
+ lib.mkIf cfg.enable {
+ programs.waybar = {
+ enable = true;
+ systemd.enable = true;
+ settings."mainBar" = import ./config.nix {inherit pkgs;};
+ style = lib.mkIf (cfg.theme == "catppuccin") ''
+ @import "${./catppuccin.scss}";
+
+ ${builtins.readFile ./style.scss}
+ '';
+ };
+ }
diff --git a/modules/desktop/home/environments/hyprland/waybar/power_menu.xml b/modules/desktop/home/environments/hyprland/waybar/power_menu.xml
new file mode 100644
index 0000000..2935c89
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/waybar/power_menu.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkMenu" id="menu">
+ <child>
+ <object class="GtkMenuItem" id="logout">
+ <property name="label">Log Out</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="delimiter1"/>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="reboot">
+ <property name="label">Reboot</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="shutdown">
+ <property name="label">Shutdown</property>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/modules/desktop/home/environments/hyprland/waybar/style.scss b/modules/desktop/home/environments/hyprland/waybar/style.scss
new file mode 100644
index 0000000..7674164
--- /dev/null
+++ b/modules/desktop/home/environments/hyprland/waybar/style.scss
@@ -0,0 +1,86 @@
+* {
+ font-family: Iosevka Nerd Font;
+ font-size: 10pt;
+ min-height: 0;
+}
+
+#waybar {
+ background: @base;
+ color: @text;
+}
+
+#workspaces,
+#clock,
+#battery,
+#wireplumber,
+#bluetooth.connected,
+#custom-power {
+ color: @text;
+ background: @surface0;
+
+ padding: 0.5rem 1rem;
+ border-radius: 1rem;
+
+ margin: 5px 0;
+}
+
+#workspaces button {
+ color: @lavender;
+ border-radius: 1rem;
+ padding: 0rem 0.75rem;
+}
+
+#workspaces button.active {
+ color: @sky;
+}
+
+#workspaces button:hover {
+ box-shadow: inherit;
+ text-shadow: inherit;
+ background: none;
+ border: none;
+ border-color: transparent;
+ padding: 0 0.75rem;
+ margin: 0;
+}
+
+#window {
+ font-size: 12pt;
+}
+
+#custom-launcher {
+ color: @blue;
+ font-size: 12pt;
+ padding: 0;
+ margin: 0;
+
+ margin-left: 1rem;
+ margin-right: 1rem;
+}
+
+#bluetooth.connected {
+ color: @blue;
+}
+
+#wireplumber {
+ color: @maroon;
+ border-radius: 1rem 0 0 1rem;
+ margin-left: 1rem;
+}
+
+#battery {
+ color: @green;
+ border-radius: 0;
+}
+
+#clock {
+ color: @blue;
+ border-radius: 0 1rem 1rem 0;
+ margin-right: 1rem;
+}
+
+#custom-power {
+ color: @rosewater;
+ margin-right: 1rem;
+ /* border: @rosewater 1px solid; */
+} \ No newline at end of file
diff --git a/modules/desktop/home/gtk/adwaita.nix b/modules/desktop/home/gtk/adwaita.nix
new file mode 100644
index 0000000..1a17d13
--- /dev/null
+++ b/modules/desktop/home/gtk/adwaita.nix
@@ -0,0 +1,33 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.gtk;
+in
+ lib.mkIf (cfg.theme == "adwaita") {
+ home.pointerCursor = {
+ gtk.enable = true;
+ dotIcons.enable = false;
+
+ package = pkgs.vanilla-dmz;
+ name = "Vanilla-DMZ";
+ size = 24;
+ };
+
+ gtk.theme = {
+ name = "adw-gtk3";
+ package = pkgs.adw-gtk3;
+ };
+
+ dconf = {
+ enable = true;
+ settings = {
+ "org/gnome/desktop/interface" = {
+ color-scheme = "prefer-dark";
+ enable-hot-corners = false;
+ };
+ };
+ };
+ }
diff --git a/modules/desktop/home/gtk/catppuccin.nix b/modules/desktop/home/gtk/catppuccin.nix
new file mode 100644
index 0000000..81f0d3d
--- /dev/null
+++ b/modules/desktop/home/gtk/catppuccin.nix
@@ -0,0 +1,33 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.gtk;
+in
+ lib.mkIf (cfg.theme == "catppuccin") {
+ home.pointerCursor = {
+ hyprcursor = {
+ enable = true;
+ size = 24;
+ };
+ gtk.enable = true;
+ dotIcons.enable = false;
+
+ package = pkgs.catppuccin-cursors.mochaDark;
+ name = "catppuccin-mocha-dark-cursors";
+ size = 24;
+ };
+
+ gtk = {
+ theme = {
+ package = pkgs.catppuccin-gtk.override {
+ accents = ["blue"];
+ variant = "mocha";
+ size = "standard";
+ };
+ name = "catppuccin-mocha-blue-standard";
+ };
+ };
+ }
diff --git a/modules/desktop/home/gtk/default.nix b/modules/desktop/home/gtk/default.nix
new file mode 100644
index 0000000..8dc00f2
--- /dev/null
+++ b/modules/desktop/home/gtk/default.nix
@@ -0,0 +1,26 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.gtk;
+in {
+ imports = [
+ ./catppuccin.nix
+ ./adwaita.nix
+ ];
+
+ config = {
+ home.packages = [pkgs.dconf];
+
+ gtk = {
+ enable = true;
+ iconTheme = {
+ package = pkgs.papirus-icon-theme;
+ name = "Papirus";
+ };
+ gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
+ };
+ };
+}
diff --git a/modules/desktop/home/programs/firefox/adwaita.nix b/modules/desktop/home/programs/firefox/adwaita.nix
new file mode 100644
index 0000000..2655f42
--- /dev/null
+++ b/modules/desktop/home/programs/firefox/adwaita.nix
@@ -0,0 +1,25 @@
+{
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.firefox;
+
+ firefox-gnome-theme = builtins.fetchGit {
+ url = "https://github.com/rafaelmardojai/firefox-gnome-theme";
+ rev = "59e3de00f01e5adb851d824cf7911bd90c31083a";
+ };
+in
+ lib.mkIf (cfg.enable && cfg.theme == "adwaita") {
+ home.file.".mozilla/firefox/${cfg.profileName}/chrome" = {
+ recursive = true;
+ source = firefox-gnome-theme;
+ };
+
+ programs.firefox.profiles."${cfg.profileName}" = {
+ settings = {
+ "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
+ "svg.context-properties.content.enabled" = true;
+ };
+ };
+ }
diff --git a/modules/desktop/home/programs/firefox/catppuccin.nix b/modules/desktop/home/programs/firefox/catppuccin.nix
new file mode 100644
index 0000000..7c78fab
--- /dev/null
+++ b/modules/desktop/home/programs/firefox/catppuccin.nix
@@ -0,0 +1,20 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.firefox;
+in
+ lib.mkIf (cfg.enable && cfg.theme == "catppuccin") {
+ programs.firefox.profiles."${cfg.profileName}".settings = {
+ "browser.compactmode.show" = true;
+ "browser.uidensity" = 1;
+
+ "browser.tabs.inTitlebar" = 0;
+ "sidebar.verticalTabs" = true;
+ "sidebar.main.tools" = "";
+
+ "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":[],"nav-bar":["sidebar-button","customizableui-special-spring4","back-button","forward-button","urlbar-container","ublock0_raymondhill_net-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","unified-extensions-button","vertical-spacer"],"toolbar-menubar":["menubar-items"],"TabsToolbar":[],"vertical-tabs":["tabbrowser-tabs"],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","ublock0_raymondhill_net-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"],"dirtyAreaCache":["nav-bar","TabsToolbar","vertical-tabs","PersonalToolbar","toolbar-menubar","unified-extensions-area"],"currentVersion":21,"newElementCount":6}'';
+ "browser.uiCustomization.navBarWhenVerticalTabs" = ''["sidebar-button","customizableui-special-spring4","back-button","forward-button","urlbar-container","ublock0_raymondhill_net-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","unified-extensions-button","vertical-spacer"]'';
+ };
+ }
diff --git a/modules/desktop/home/programs/firefox/default.nix b/modules/desktop/home/programs/firefox/default.nix
new file mode 100644
index 0000000..91230d9
--- /dev/null
+++ b/modules/desktop/home/programs/firefox/default.nix
@@ -0,0 +1,17 @@
+{
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.firefox;
+in {
+ imports = [
+ ./profile.nix
+ ./adwaita.nix
+ ./catppuccin.nix
+ ];
+
+ config = lib.mkIf (cfg.enable) {
+ programs.firefox.enable = true;
+ };
+}
diff --git a/modules/desktop/home/programs/firefox/profile.nix b/modules/desktop/home/programs/firefox/profile.nix
new file mode 100644
index 0000000..cab8f40
--- /dev/null
+++ b/modules/desktop/home/programs/firefox/profile.nix
@@ -0,0 +1,38 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.firefox;
+in
+ lib.mkIf cfg.enable {
+ programs.firefox.profiles."${cfg.profileName}" = {
+ isDefault = true;
+ search.default = "ddg";
+
+ containersForce = true;
+ containers = {
+ "school" = {
+ color = "orange";
+ icon = "briefcase";
+ id = 3;
+ };
+ "personal" = {
+ color = "blue";
+ icon = "fingerprint";
+ id = 2;
+ };
+ "default" = {
+ color = "red";
+ icon = "circle";
+ id = 1;
+ };
+ };
+
+ settings = {
+ "browser.aboutConfig.showWarning" = false;
+ "browser.toolbars.bookmarks.visibility" = "never";
+ "browser.urlbar.groupLabels.enabled" = false;
+ };
+ };
+ }
diff --git a/modules/desktop/home/programs/musescore.nix b/modules/desktop/home/programs/musescore.nix
new file mode 100644
index 0000000..5fbf0f5
--- /dev/null
+++ b/modules/desktop/home/programs/musescore.nix
@@ -0,0 +1,13 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.musescore;
+in
+ lib.mkIf cfg.enable {
+ home.packages = [pkgs.musescore];
+
+ # TODO: is there a way to declare a musescore configuration?
+ }
diff --git a/modules/desktop/options.nix b/modules/desktop/options.nix
new file mode 100644
index 0000000..0301373
--- /dev/null
+++ b/modules/desktop/options.nix
@@ -0,0 +1,67 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ inherit (lib) mkOption mkEnableOption types;
+
+ mkProgramOption' = name: extraOpts:
+ {
+ enable = mkEnableOption "whether to enable ${name}";
+ theme = mkOption {
+ type = types.enum ["catppuccin" "adwaita"];
+ default = config.collinux.terminal.theme;
+ };
+ }
+ // extraOpts;
+
+ mkProgramOption = name: mkProgramOption' name {};
+in {
+ options = {
+ collinux.desktop = {
+ greeter = mkOption {
+ type = types.enum ["gdm" "greetd"];
+ default = let
+ cfg = config.collinux.desktop;
+ in
+ if ((cfg.hyprland.enable || cfg.sway.enable) && !cfg.gnome.enable)
+ then "greetd"
+ else "gdm";
+ };
+
+ components = {
+ waybar = mkProgramOption "waybar";
+ dunst = mkProgramOption "dunst";
+ fuzzel = mkProgramOption "fuzzel";
+ };
+
+ sway = {
+ enable = mkEnableOption "sway";
+ };
+
+ gnome.enable = mkEnableOption "gnome";
+
+ gtk.theme = mkOption {
+ type = types.enum ["catppuccin" "adwaita"];
+ default = config.collinux.theme;
+ };
+
+ programs = {
+ firefox = {
+ enable = mkEnableOption "firefox";
+ profileName = mkOption {
+ type = types.str;
+ default = config.collinux.user.name;
+ };
+ theme = mkOption {
+ type = types.enum ["none" "catppuccin" "adwaita"];
+ default = config.collinux.theme;
+ };
+ };
+ foot.enable = mkEnableOption "foot";
+
+ musescore.enable = mkEnableOption "musescore";
+ };
+ };
+ };
+}
diff --git a/modules/desktop/system/components/dunst.nix b/modules/desktop/system/components/dunst.nix
new file mode 100644
index 0000000..cb650a1
--- /dev/null
+++ b/modules/desktop/system/components/dunst.nix
@@ -0,0 +1,38 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}: let
+ cfg = config.collinux.desktop.components.dunst;
+
+ settings = pkgs.writeText "dunstrc" ''
+ [global]
+ frame_color = "#89b4fa"
+ separator_color = frame
+ highlight = "#89b4fa"
+ offset = "8x30"
+ origin = "top-right"
+ transparency = 10
+ font = "Iosevka Nerd Font"
+
+ [urgency_low]
+ background = "#1e1e2e"
+ foreground = "#cdd6f4"
+
+ [urgency_normal]
+ background = "#1e1e2e"
+ foreground = "#cdd6f4"
+
+ [urgency_critical]
+ background = "#1e1e2e"
+ foreground = "#cdd6f4"
+ frame_color = "#fab387"
+ '';
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files.".config/dunst/dunstrc".source = settings;
+ packages = [pkgs.dunst];
+ };
+ }
diff --git a/modules/desktop/system/components/fuzzel.nix b/modules/desktop/system/components/fuzzel.nix
new file mode 100644
index 0000000..f5937c6
--- /dev/null
+++ b/modules/desktop/system/components/fuzzel.nix
@@ -0,0 +1,50 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}: let
+ cfg = config.collinux.desktop.components.fuzzel;
+ ini' = pkgs.formats.ini {};
+
+ settings = ini'.generate "fuzzel.ini" {
+ main = {
+ prompt = " ";
+ dpi-aware = false;
+
+ font = "Iosevka Nerd Font";
+ line-height = 25;
+ lines = 10;
+ width = 30;
+
+ horizontal-pad = 8;
+ vertical-pad = 8;
+ };
+ border = {
+ radius = 0;
+ width = 2;
+ };
+
+ colors = {
+ background = "1e1e2edd";
+ text = "cdd6f4ff";
+ prompt = "bac2deff";
+ placeholder = "7f849cff";
+ input = "cdd6f4ff";
+ match = "89b4faff";
+ selection = "585b70ff";
+ selection-text = "cdd6f4ff";
+ selection-match = "89b4faff";
+ counter = "7f849cff";
+ border = "89b4faff";
+ };
+ };
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/fuzzel/fuzzel.ini".source = settings;
+ };
+ packages = [pkgs.fuzzel];
+ };
+ }
diff --git a/modules/desktop/system/default.nix b/modules/desktop/system/default.nix
new file mode 100644
index 0000000..8ebe9b0
--- /dev/null
+++ b/modules/desktop/system/default.nix
@@ -0,0 +1,12 @@
+{...}: {
+ imports = [
+ ./environments/gnome.nix
+ ./environments/sway.nix
+
+ ./programs/firefox.nix
+ ./programs/foot.nix
+
+ ./components/fuzzel.nix
+ ./components/dunst.nix
+ ];
+}
diff --git a/modules/desktop/system/environments/gnome.nix b/modules/desktop/system/environments/gnome.nix
new file mode 100644
index 0000000..e4f6922
--- /dev/null
+++ b/modules/desktop/system/environments/gnome.nix
@@ -0,0 +1,67 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.gnome;
+in
+ lib.mkIf cfg.enable {
+ services.xserver = {
+ displayManager.gdm = {
+ enable = true;
+ wayland = true;
+ };
+ desktopManager.gnome.enable = true;
+ };
+
+ environment.gnome.excludePackages = with pkgs; [
+ orca
+ evince
+ file-roller
+ geary
+ gnome-disk-utility
+ seahorse
+ # sushi
+ # sysprof
+ # gnome-shell-extensions
+ adwaita-icon-theme
+ # nixos-background-info
+ gnome-backgrounds
+ # gnome-bluetooth
+ # gnome-color-manager
+ # gnome-control-center
+ # gnome-shell-extensions
+ gnome-tour # GNOME Shell detects the .desktop file on first log-in.
+ gnome-user-docs
+ # glib # for gsettings program
+ # gnome-menus
+ # gtk3.out # for gtk-launch program
+ # xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
+ # xdg-user-dirs-gtk # Used to create the default bookmarks
+ #
+ baobab
+ epiphany
+ gnome-text-editor
+ gnome-calculator
+ gnome-calendar
+ gnome-characters
+ # gnome-clocks
+ gnome-console
+ gnome-contacts
+ gnome-font-viewer
+ gnome-logs
+ gnome-maps
+ gnome-music
+ # gnome-system-monitor
+ gnome-weather
+ # loupe
+ # nautilus
+ gnome-connections
+ simple-scan
+ snapshot
+ totem
+ yelp
+ gnome-software
+ ];
+ }
diff --git a/modules/desktop/system/environments/sway.nix b/modules/desktop/system/environments/sway.nix
new file mode 100644
index 0000000..467363a
--- /dev/null
+++ b/modules/desktop/system/environments/sway.nix
@@ -0,0 +1,103 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.sway;
+
+ colors = pkgs.writeText "catppuccin-mocha" ''
+ set $rosewater #f5e0dc
+ set $flamingo #f2cdcd
+ set $pink #f5c2e7
+ set $mauve #cba6f7
+ set $red #f38ba8
+ set $maroon #eba0ac
+ set $peach #fab387
+ set $yellow #f9e2af
+ set $green #a6e3a1
+ set $teal #94e2d5
+ set $sky #89dceb
+ set $sapphire #74c7ec
+ set $blue #89b4fa
+ set $lavender #b4befe
+ set $text #cdd6f4
+ set $subtext1 #bac2de
+ set $subtext0 #a6adc8
+ set $overlay2 #9399b2
+ set $overlay1 #7f849c
+ set $overlay0 #6c7086
+ set $surface2 #585b70
+ set $surface1 #45475a
+ set $surface0 #313244
+ set $base #1e1e2e
+ set $mantle #181825
+ set $crust #11111b
+ '';
+
+ settings = pkgs.writeText "config" ''
+ exec ${pkgs.foot}/bin/foot --server
+ exec ${pkgs.swaybg}/bin/swaybg -i ${config.collinux.desktop.wallpaper}
+
+ include catppuccin-mocha
+
+ # target title bg text indicator border
+ client.focused $lavender $base $text $rosewater $lavender
+ client.focused_inactive $overlay0 $base $text $rosewater $overlay0
+ client.unfocused $overlay0 $base $text $rosewater $overlay0
+ client.urgent $peach $base $peach $overlay0 $peach
+ client.placeholder $overlay0 $base $text $overlay0 $overlay0
+ client.background $base
+
+ # bar {
+ # colors {
+ # background $base
+ # statusline $text
+ # focused_statusline $text
+ # focused_separator $base
+
+ # # target border bg text
+ # focused_workspace $base $mauve $crust
+ # active_workspace $base $surface2 $text
+ # inactive_workspace $base $base $text
+ # urgent_workspace $base $red $crust
+ # }
+ # }
+
+ bindsym Mod4+1 workspace number 1
+ bindsym Mod4+2 workspace number 2
+ bindsym Mod4+3 workspace number 3
+ bindsym Mod4+4 workspace number 4
+ bindsym Mod4+Return exec "${pkgs.foot}/bin/footclient"
+ bindsym Mod4+Shift+Return exec ${pkgs.foot}/bin/foot
+ bindsym Mod4+Space exec ${pkgs.fuzzel}/bin/fuzzel
+ bindsym Mod4+b exec ${pkgs.firefox}/bin/firefox
+ bindsym Mod4+q kill
+
+ default_border pixel 2
+ smart_borders on
+ smart_gaps on
+ '';
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/sway/config".source = settings;
+ ".config/sway/catppuccin-mocha".source = colors;
+ };
+
+ packages = [pkgs.sway];
+ };
+
+ # Greetd
+ services.greetd = {
+ enable = true;
+ settings = rec {
+ initial_session = {
+ command = "${pkgs.sway}/bin/sway";
+ user = config.collinux.user.name;
+ };
+ default_session = initial_session;
+ };
+ };
+ }
diff --git a/modules/desktop/system/programs/firefox.nix b/modules/desktop/system/programs/firefox.nix
new file mode 100644
index 0000000..e5c5e21
--- /dev/null
+++ b/modules/desktop/system/programs/firefox.nix
@@ -0,0 +1,36 @@
+{
+ lib,
+ config,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.firefox;
+in
+ lib.mkIf cfg.enable {
+ programs.firefox = {
+ enable = true;
+ policies = {
+ PasswordManagerEnabled = false; # use bitwarden instead
+ DisableAccounts = true;
+ DisablePocket = true;
+
+ OverrideFirstRunPage = "";
+ OverridePostUpdatePage = "";
+
+ ExtensionSettings = let
+ ext = name: {
+ installation_mode = "force_installed";
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/${name}/latest.xpi";
+ };
+ in
+ lib.mkMerge [
+ {
+ "{446900e4-71c2-419f-a6a7-df9c091e268b}" = ext "bitwarden-password-manager";
+ "uBlock0@raymondhill.net" = ext "uBlock0@raymondhill.net";
+ }
+ (lib.mkIf (cfg.theme == "catppuccin") {
+ "{88b098c8-19be-421e-8ffa-85ddd1f3f004}" = ext "catppuccin-mocha-blue";
+ })
+ ];
+ };
+ };
+ }
diff --git a/modules/desktop/system/programs/foot.nix b/modules/desktop/system/programs/foot.nix
new file mode 100644
index 0000000..d6f97c7
--- /dev/null
+++ b/modules/desktop/system/programs/foot.nix
@@ -0,0 +1,64 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.collinux.desktop.programs.foot;
+ ini' = pkgs.formats.ini {listsAsDuplicateKeys = true;};
+
+ settings = ini'.generate "foot.ini" {
+ main = {
+ font = "Iosevka Nerd Font:size=12";
+ shell =
+ if config.collinux.terminal.programs.tmux.enable
+ then "${pkgs.tmux}/bin/tmux"
+ else "${pkgs.fish}/bin/fish";
+ };
+
+ cursor.color = "11111b f5e0dc";
+ colors = {
+ foreground = "cdd6f4";
+ background = "1e1e2e";
+
+ regular0 = "45475a";
+ regular1 = "f38ba8";
+ regular2 = "a6e3a1";
+ regular3 = "f9e2af";
+ regular4 = "89b4fa";
+ regular5 = "f5c2e7";
+ regular6 = "94e2d5";
+ regular7 = "bac2de";
+
+ bright0 = "585b70";
+ bright1 = "f38ba8";
+ bright2 = "a6e3a1";
+ bright3 = "f9e2af";
+ bright4 = "89b4fa";
+ bright5 = "f5c2e7";
+ bright6 = "94e2d5";
+ bright7 = "a6adc8";
+
+ "16" = "fab387";
+ "17" = "f5e0dc";
+
+ selection-foreground = "cdd6f4";
+ selection-background = "414356";
+
+ search-box-no-match = "11111b f38ba8";
+ search-box-match = "cdd6f4 313244";
+
+ jump-labels = "11111b fab387";
+ urls = "89b4fa";
+ };
+ };
+in
+ lib.mkIf cfg.enable {
+ hjem.users."${config.collinux.user.name}" = {
+ files = {
+ ".config/foot/foot.ini".source = settings;
+ };
+
+ packages = [pkgs.foot];
+ };
+ }