diff options
Diffstat (limited to 'modules/desktop')
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 Binary files differnew file mode 100644 index 0000000..039afcc --- /dev/null +++ b/modules/desktop/home/environments/hyprland/hyprland/wallpaper.jpg 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]; + }; + } |
