diff --git a/flake.lock b/flake.lock index f1ca87b..b2fe18a 100644 --- a/flake.lock +++ b/flake.lock @@ -198,21 +198,6 @@ }, "flake-compat_4": { "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_5": { "locked": { "lastModified": 1717312683, "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", @@ -625,17 +610,16 @@ "rust-overlay": "rust-overlay_3" }, "locked": { - "lastModified": 1724346840, + "dirtyRev": "8a665fee82901878edaeb8ee120296a979db2dd2-dirty", + "dirtyShortRev": "8a665fe-dirty", + "lastModified": 1722469787, "narHash": "sha256-nLaw2AFhDdBmbuWICe983Pbiq+GyNMPJMpSLWV6vVZA=", - "owner": "mjallen18", - "repo": "nixos-apple-silicon", - "rev": "77b99b63b125d85693934c83b04e1797cbf7afe7", - "type": "github" + "type": "git", + "url": "file:///home/matt/nixos-apple-silicon" }, "original": { - "owner": "mjallen18", - "repo": "nixos-apple-silicon", - "type": "github" + "type": "git", + "url": "file:///home/matt/nixos-apple-silicon" } }, "nixos-hardware": { @@ -825,6 +809,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1724224976, + "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1721466660, "narHash": "sha256-pFSxgSZqZ3h+5Du0KvEL1ccDZBwu4zvOil1zzrPNb3c=", @@ -990,6 +990,46 @@ "type": "github" } }, + "rust-overlay_4": { + "flake": false, + "locked": { + "lastModified": 1724293269, + "narHash": "sha256-x/XhOAszT/ejditCHUtGOjQcVg2AQhrC/QVew3i7kTI=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "6dc6d34a3a217457d7044dcce32b6d537480a6a1", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "slimlock": { + "inputs": { + "nixpkgs": [ + "nix-inspect", + "nci", + "dream2nix", + "purescript-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688610262, + "narHash": "sha256-Wg0ViDotFWGWqKIQzyYCgayeH8s4U1OZcTiWTQYdAp4=", + "owner": "thomashoneyman", + "repo": "slimlock", + "rev": "b5c6cdcaf636ebbebd0a1f32520929394493f1a6", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "slimlock", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": "nixpkgs_6", diff --git a/flake.nix b/flake.nix index d464afe..4b06ab4 100644 --- a/flake.nix +++ b/flake.nix @@ -33,7 +33,8 @@ sops-nix.url = "github:Mic92/sops-nix"; #Apple - nixos-apple-silicon.url = "github:mjallen18/nixos-apple-silicon"; + # nixos-apple-silicon.url = "github:mjallen18/nixos-apple-silicon"; + nixos-apple-silicon.url = "git+file:///home/matt/nixos-apple-silicon"; nix-darwin.url = "github:LnL7/nix-darwin"; cosmic = { diff --git a/hosts/mac-nixos/configuration.nix b/hosts/mac-nixos/configuration.nix index fc0c687..54c52b8 100644 --- a/hosts/mac-nixos/configuration.nix +++ b/hosts/mac-nixos/configuration.nix @@ -8,6 +8,8 @@ # Include the results of the hardware scan. ./hardware-configuration.nix ../default.nix + ./gnome +# ./cosmic ]; hardware.asahi.enable = true; @@ -15,14 +17,12 @@ hardware.asahi.peripheralFirmwareDirectory = ./firmware; hardware.asahi.setupAsahiSound = true; - sound.enable = true; - # Use the systemd-boot EFI boot loader. boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.configurationLimit = 3; boot.loader.efi.canTouchEfiVariables = false; - apps.discover-wrapped.enable = true; + apps.discover-wrapped.enable = lib.mkDefault true; boot.extraModprobeConfig = '' options hid_apple iso_layout=0 @@ -32,17 +32,9 @@ networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. services = { - # Enable the X11 windowing system. - xserver = { - enable = true; - - desktopManager.gnome.enable = false; - # Enable the Plasma 6 Desktop Environment. - displayManager.gdm.enable = false; - }; - - displayManager.sddm.enable = true; - desktopManager.plasma6.enable = true; + displayManager.sddm.wayland.enable = lib.mkDefault true; + displayManager.sddm.enable = lib.mkDefault true; + desktopManager.plasma6.enable = lib.mkDefault true; # enable auto discovery of printers avahi = { @@ -52,7 +44,7 @@ }; # Enable Flatpak - flatpak.enable = true; + flatpak.enable = lib.mkDefault true; }; # Define a user account. Don't forget to set a password with ‘passwd’. diff --git a/hosts/mac-nixos/cosmic/default.nix b/hosts/mac-nixos/cosmic/default.nix new file mode 100644 index 0000000..50fb6ef --- /dev/null +++ b/hosts/mac-nixos/cosmic/default.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +{ + specialisation.cosmic.configuration = { + services = { + desktopManager.cosmic.enable = true; + displayManager.cosmic-greeter.enable = true; + + # disable plasma + displayManager.sddm.enable = false; + displayManager.sddm.wayland.enable = false; + desktopManager.plasma6.enable = false; + }; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/gnome/default.nix b/hosts/mac-nixos/gnome/default.nix new file mode 100644 index 0000000..8049f9d --- /dev/null +++ b/hosts/mac-nixos/gnome/default.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + specialisation.gnome.configuration = { + + home-manager.users.matt = import ./home.nix; + apps.discover-wrapped.enable = false; + + services = { + xserver = { + desktopManager.gnome.enable = true; + + # Enable Desktop Environment. + displayManager = { + gdm.enable = true; + gdm.wayland = true; + }; + }; + + displayManager.defaultSession = "gnome"; + + # Enable Flatpak + flatpak.enable = true; + + # disable plasma + displayManager.sddm.enable = false; + displayManager.sddm.wayland.enable = false; + desktopManager.plasma6.enable = false; + }; + + # xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/gnome/home.nix b/hosts/mac-nixos/gnome/home.nix new file mode 100644 index 0000000..29d259f --- /dev/null +++ b/hosts/mac-nixos/gnome/home.nix @@ -0,0 +1,41 @@ +{ lib, pkgs, ... }: +{ + home.packages = with pkgs; [ + nixfmt-rfc-style + deadnix + gnomeExtensions.dash-to-dock + gnomeExtensions.arcmenu + gnomeExtensions.appindicator + gnomeExtensions.tiling-assistant + gnome-tweaks + papirus-icon-theme + ]; + + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface".clock-format = "12h"; + "org/gnome/desktop/interface".color-scheme = "prefer-dark"; + "org/gnome/desktop/interface".enable-hot-corners = false; + "org/gnome/desktop/interface".font-antialiasing = "grayscale"; + "org/gnome/desktop/interface".font-hinting = "slight"; + "org/gnome/desktop/interface".icon-theme = lib.mkDefault "Papirus-Dark"; + "org/gnome/desktop/peripherals/mouse".accel-profile = "flat"; + "org/gnome/desktop/peripherals/touchpad".two-finger-scrolling-enabled = true; + "org/gnome/desktop/peripherals/touchpad".tap-to-click = true; + "org/gnome/mutter".experimental-features = [ + "scale-monitor-framebuffer" + "variable-refresh-rate" + ]; + "org/gnome/tweaks".show-extensions-notice = false; + "org/gnome/shell".enabled-extensions = [ + "appindicatorsupport@rgcjonas.gmail.com" + "arcmenu@arcmenu.com" + "user-theme@gnome-shell-extensions.gcampax.github.com" + "dash-to-dock@micxgx.gmail.com" + "tiling-assistant@leleat-on-github" + ]; + "org/gtk/settings/file-chooser".clock-format = "12h"; + }; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/home.nix b/hosts/mac-nixos/home.nix index 288e956..7800d32 100644 --- a/hosts/mac-nixos/home.nix +++ b/hosts/mac-nixos/home.nix @@ -52,33 +52,7 @@ home.packages = with pkgs; [ nixfmt-rfc-style deadnix - gnomeExtensions.dash-to-dock - gnomeExtensions.arcmenu - gnomeExtensions.appindicator - gnome.gnome-tweaks papirus-icon-theme ]; - dconf = { - enable = true; - settings = { - "org/gnome/desktop/interface".clock-format = "12h"; - "org/gnome/desktop/interface".color-scheme = "prefer-dark"; - "org/gnome/desktop/interface".enable-hot-corners = false; - "org/gnome/desktop/interface".font-antialiasing = "grayscale"; - "org/gnome/desktop/interface".font-hinting = "slight"; - "org/gnome/desktop/interface".icon-theme = "Papirus-Dark"; - "org/gnome/desktop/peripherals/touchpad".two-finger-scrolling-enabled = true; - "org/gnome/desktop/peripherals/touchpad".tap-to-click = true; - "org/gnome/mutter".experimental-features = [ "scale-monitor-framebuffer" ]; - "org/gnome/tweaks".show-extensions-notice = false; - "org/gnome/shell".enabled-extensions = [ - "appindicatorsupport@rgcjonas.gmail.com" - "dash-to-dock@micxgx.gmail.com" - "arcmenu@arcmenu.com" - "user-theme@gnome-shell-extensions.gcampax.github.com" - ]; - "org/gtk/settings/file-chooser".clock-format = "12h"; - }; - }; } diff --git a/hosts/mac-nixos/hyprland/config.nix b/hosts/mac-nixos/hyprland/config.nix new file mode 100644 index 0000000..ba441bf --- /dev/null +++ b/hosts/mac-nixos/hyprland/config.nix @@ -0,0 +1,13 @@ +let configDir = ./config; +in +{ + home.file = { + ".config/wallpapers".source = "${configDir}/wallpapers"; + ".config/kitty/macchiato.conf".source = "${configDir}/kitty/macchiato.conf"; + ".config/wlogout".source = "${configDir}/wlogout"; # + ".config/waybar/scripts".source = "${configDir}/waybar/scripts"; + ".config/btop/themes/catppuccin_macchiato.theme".source = "${configDir}/btop/themes/catppuccin_macchiato.theme"; + ".config/nwg-drawer".source = "${configDir}/nwg-drawer"; + ".config/nwg-panel".source = "${configDir}/nwg-panel"; + }; +} diff --git a/hosts/mac-nixos/hyprland/config/btop/default.nix b/hosts/mac-nixos/hyprland/config/btop/default.nix new file mode 100644 index 0000000..182baeb --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/btop/default.nix @@ -0,0 +1,71 @@ +{ + programs.btop = { + enable = true; + settings = { + color_theme = "/home/matt/.config/btop/themes/catppuccin_macchiato.theme"; + theme_background = true; + truecolor = true; + force_tty = false; + presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"; + vim_keys = true; + rounded_corners = true; + graph_symbol = "braille"; + graph_symbol_cpu = "default"; + graph_symbol_mem = "default"; + graph_symbol_net = "default"; + graph_symbol_proc = "default"; + shown_boxes = "cpu mem net proc"; + update_ms = 2000; + proc_sorting = "cpu lazy"; + proc_reversed = false; + proc_tree = false; + proc_colors = true; + proc_gradient = true; + proc_per_core = false; + proc_mem_bytes = true; + proc_cpu_graphs = true; + proc_info_smaps = false; + proc_left = false; + proc_filter_kernel = false; + cpu_graph_upper = "total"; + cpu_graph_lower = "total"; + cpu_invert_lower = true; + cpu_single_graph = false; + cpu_bottom = false; + show_uptime = true; + check_temp = true; + cpu_sensor = "Auto"; + show_coretemp = true; + cpu_core_map = ""; + temp_scale = "celsius"; + base_10_sizes = false; + show_cpu_freq = true; + clock_format = "%X"; + background_update = true; + custom_cpu_name = ""; + disks_filter = ""; + mem_graphs = true; + mem_below_net = false; + zfs_arc_cached = true; + show_swap = true; + swap_disk = true; + show_disks = true; + only_physical = true; + use_fstab = true; + zfs_hide_datasets = false; + disk_free_priv = false; + show_io_stat = true; + io_mode = false; + io_graph_combined = false; + io_graph_speeds = ""; + net_download = 100; + net_upload = 100; + net_auto = true; + net_sync = true; + net_iface = ""; + show_battery = true; + selected_battery = "Auto"; + log_level = "WARNING"; + }; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/btop/themes/catppuccin_macchiato.theme b/hosts/mac-nixos/hyprland/config/btop/themes/catppuccin_macchiato.theme new file mode 100644 index 0000000..7abd0bf --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/btop/themes/catppuccin_macchiato.theme @@ -0,0 +1,42 @@ +theme[main_bg]="#24273A" +theme[main_fg]="#CAD3F5" +theme[title]="#CAD3F5" +theme[hi_fg]="#8AADF4" +theme[selected_bg]="#494D64" +theme[selected_fg]="#8AADF4" +theme[inactive_fg]="#8087A2" +theme[graph_text]="#F4DBD6" +theme[meter_bg]="#494D64" +theme[proc_misc]="#F4DBD6" +theme[cpu_box]="#7DC4E4" +theme[mem_box]="#A6DA95" +theme[net_box]="#C6A0F6" +theme[proc_box]="#F0C6C6" +theme[div_line]="#6E738D" +theme[temp_start]="#EED49F" +theme[temp_mid]="#F5A97F" +theme[temp_end]="#ED8796" +theme[cpu_start]="#7DC4E4" +theme[cpu_mid]="#91D7E3" +theme[cpu_end]="#8BD5CA" +theme[free_start]="#8BD5CA" +theme[free_mid]="#8BD5CA" +theme[free_end]="#A6DA95" +theme[cached_start]="#F5BDE6" +theme[cached_mid]="#F5BDE6" +theme[cached_end]="#C6A0F6" +theme[available_start]="#F4DBD6" +theme[available_mid]="#F0C6C6" +theme[available_end]="#F0C6C6" +theme[used_start]="#F5A97F" +theme[used_mid]="#F5A97F" +theme[used_end]="#ED8796" +theme[download_start]="#B7BDF8" +theme[download_mid]="#B7BDF8" +theme[download_end]="#C6A0F6" +theme[upload_start]="#B7BDF8" +theme[upload_mid]="#B7BDF8" +theme[upload_end]="#C6A0F6" +theme[process_start]="#7DC4E4" +theme[process_mid]="#91D7E3" +theme[process_end]="#8BD5CA" diff --git a/hosts/mac-nixos/hyprland/config/hypr/default.nix b/hosts/mac-nixos/hyprland/config/hypr/default.nix new file mode 100644 index 0000000..17bf0b0 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/hypr/default.nix @@ -0,0 +1,271 @@ +{ + wayland.windowManager.hyprland = { + enable = true; + xwayland.enable = true; + systemd.enable = true; + + settings = { + "$mod" = "SUPER"; + + # Mouse + # mouse_[up|down] - scroll wheel + # middle_mouse - 274 + # thumb_up - 276 + # thumb_down - 275 + + # l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active. + # r -> release, will trigger on release of a key. + # e -> repeat, will repeat when held. + # n -> non-consuming, key/mouse events will be passed to the active window in addition to triggering the dispatcher. + # m -> mouse, see below. + # t -> transparent, cannot be shadowed by other binds. + # i -> ignore mods, will ignore modifiers. + # s -> separate, will arbitrarily combine keys between each mod/key, see [Keysym combos](#keysym-combos) above. + # d -> has description, will allow you to write a description for your bind. + # p -> bypasses the app's requests to inhibit keybinds. + + # https://wiki.hyprland.org/Configuring/Binds/ + # https://wiki.hyprland.org/Configuring/Binds/#mouse-buttons + + bind = [ + "$mod, Return, exec, kitty" + "$mod, Q, killactive, " + "$mod, mouse:274, killactive, " + "$mod, M, exec, wlogout --protocol layer-shell" + "$mod, E, exec, nautilus" + "$mod, V, togglefloating, " + "$mod, D, exec, nwg-drawer -fm nautilus -term kitty" + "$mod, P, pseudo, "# dwindle + "$mod, S, togglesplit, "# dwindle + "$mod SHIFT, Q, exec, hyprlock" + ", PRINT, exec, hyprshot -m region --clipboard-only" + "$mod,F,exec,hyprctl dispatch fullscreen active" + + # alt-tab between workspaces on active monitor + "ALT, Tab, workspace, m+1" + "ALT SHIFT, Tab, workspace, m-1" + + "$mod, h, movefocus, l" + "$mod, l, movefocus, r" + "$mod, k, movefocus, u" + "$mod, j, movefocus, d" + + "$mod, 1, workspace, 1" + "$mod, 2, workspace, 2" + "$mod, 3, workspace, 3" + "$mod, 4, workspace, 4" + "$mod, 5, workspace, 5" + "$mod, 6, workspace, 6" + "$mod, 7, workspace, 7" + "$mod, 8, workspace, 8" + "$mod, 9, workspace, 9" + "$mod, 0, workspace, 10" + + "$mod SHIFT, 1, movetoworkspace, 1" + "$mod SHIFT, 2, movetoworkspace, 2" + "$mod SHIFT, 3, movetoworkspace, 3" + "$mod SHIFT, 4, movetoworkspace, 4" + "$mod SHIFT, 5, movetoworkspace, 5" + "$mod SHIFT, 6, movetoworkspace, 6" + "$mod SHIFT, 7, movetoworkspace, 7" + "$mod SHIFT, 8, movetoworkspace, 8" + "$mod SHIFT, 9, movetoworkspace, 9" + "$mod SHIFT, 0, movetoworkspace, discord" + + "$mod CTRL, l, resizeactive, 10 0" + "$mod CTRL, h, resizeactive, -10 0" + "$mod CTRL, k, resizeactive, 0 -10" + "$mod CTRL, j, resizeactive, 0 10" + + "$mod SHIFT, l, movewindow, r" + "$mod SHIFT, h, movewindow, l" + "$mod SHIFT, k, movewindow, u" + "$mod SHIFT, j, movewindow, d" + + "$mod, b, exec, firefox" + ]; + + bindm = [ + # Move/resize windows with mod + LMB/RMB and dragging + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + # middle mouse will grab a window, mod + middle mouse will close it + ", mouse:274, movewindow" + ]; + + bindel =[ + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ]; + + bindl = [ + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioPrev, exec, playerctl previous" + ", XF86AudioNext, exec, playerctl next" + ]; + + monitor = [ + "DP-1,3840x2160@240.00000,0x0,1" + "DP-2,3840x2160@59.99700,3840x0,1" + ]; + + general = { + gaps_in = 5; + gaps_out = 10; + border_size = 1; + "col.active_border" = "rgb(8aadf4) rgb(24273A) rgb(24273A) rgb(8aadf4) 45deg"; + "col.inactive_border" = "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg"; + layout = "dwindle"; + allow_tearing = true; + }; + + decoration = { + rounding = 10; + blur = { + enabled = true; + size = 2; + passes = 2; + new_optimizations = true; + xray = false; + }; + drop_shadow = "yes"; + shadow_range = 4; + shadow_render_power = "3"; + "col.shadow" = "rgba(1a1a1aee)"; + }; + + animations = { + enabled = "yes"; + bezier = [ + "overshot, 0.05, 0.9, 0.1, 1.05" + "smoothOut, 0.36, 0, 0.66, -0.56" + "smoothIn, 0.25, 1, 0.5, 1" + ]; + animation = [ + "windows, 1, 5, overshot, slide" + "windowsOut, 1, 4, smoothOut, slide" + "windowsMove, 1, 4, default" + "border, 1, 10, default" + "fade, 1, 10, smoothIn" + "fadeDim, 1, 10, smoothIn" + "workspaces, 1, 6, default" + ]; + }; + + dwindle = { + pseudotile = "yes"; + preserve_split = "yes"; + }; + + gestures = { + workspace_swipe = "off"; + }; + + misc = { + force_default_wallpaper = 0; + }; + + workspace = [ + "name:firefox, monitor:DP-2, default:false, special, firefox" + "name:discord, monitor:DP-2, default:true, special, vesktop, spotify" + "name:steam, monitor:DP-2, default:false, special, steam" + ]; + + windowrule = [ + "float, file_progress" + "float, confirm" + "float, dialog" + "float, download" + "float, notification" + "float, error" + "float, splash" + "float, confirmreset" + "float, title:Open File" + "float, title:branchdialog" + "float, pavucontrol" + "move onscreen cursor 0% 0%, pavucontrol" + "float, file-roller" + "fullscreen, wlogout" + "float, title:wlogout" + "fullscreen, title:wlogout" + "idleinhibit stayfocused, mpv" + "fullscreen, title:BBar" + "fullscreen, title:Remote Desktop Connection" + "norounding, class:Remote Desktop Connection" + "noshadow, class:Remote Desktop Connection" + "immediate, class:Remote Desktop Connection" + "syncfullscreen, class:Remote Desktop Connection" + "allowsinput, class:Remote Desktop Connection" + "noanim, class:Remote Desktop Connection" + "noblur, class:Remote Desktop Connection" + "noborder, class:Remote Desktop Connection" + "nodim, class:Remote Desktop Connection" + "nomaxsize, class:Remote Desktop Connection" + "minsize 3840 2160, class:Remote Desktop Connection" + ]; + windowrulev2 = [ + "float, class:Vmware-view,title:VMware Horizon Client" + "size 3840 2160, class:Remote Desktop Connection" + # "float, class:Remote Desktop Connection,title:BBar" + # "float, class:Remote Desktop Connection,title:Remote Desktop Connection" + "float, class:Credential Manager UI Host,title:Windows Security" + "float, title:^(Media viewer)$" + # Picture in picture windows + # "float, class:pavucontrol,title:pavucontrol" # ????? + "float, title:^(Picture-in-Picture)$" + "pin, title:^(Picture-in-Picture)$" + "float, class:^(vesktop)$,title:^(Discord Popout)$" + "pin, class:^(vesktop)$,title:^(Discord Popout)$" + "float, class:^(steam)$,title:^(Friends List)$" + # Workspace assign + # "workspace: 1, class:^(kitty)$" + # "workspace: name:discord, class:^(firefox)$" + "workspace: name:discord, class:^(vesktop)$" + + # Steam + "float, class:^([Ss]team)$, title:^((?![Ss]team).*)$" + "workspace name:steam silent, class:^([Ss]team)$, title:^([Ss]team)$" + "tile, class:^([Ss]team)$, title:^([Ss]team)$" + + # Code + # "pin, class:^(code)$,title:^(Save As)$" + "float, class:^(code)$,title:^(Save As)$" + "float, class:^(xdg-desktop-portal-gtk)$,title:^(Open Workspace from File)$" + + # Game Tearing??? https://wiki.hyprland.org/Configuring/Tearing/ + "immediate, class:gamescope" + ]; + + input = { + kb_layout = "us"; + + kb_variant = ""; + kb_model = ""; + kb_options = ""; + kb_rules = ""; + + numlock_by_default = true; + + follow_mouse = 1; + + touchpad = { + natural_scroll = "no"; + }; + + sensitivity = 0; # -1.0 - 1.0, 0 means no modification. + }; + }; + + extraConfig = '' + exec-once = dbus-update-activation-environment --systemd --all + exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + exec-once = nwg-look -a + exec-once = [silent] firefox + exec-once = [silent] vesktop + exec-once = [silent] spotify + exec-once = [silent] steam + ''; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/kitty/default.nix b/hosts/mac-nixos/hyprland/config/kitty/default.nix new file mode 100644 index 0000000..8d0b81c --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/kitty/default.nix @@ -0,0 +1,26 @@ +{ pkgs, ... }: +{ + programs.kitty = { + enable = true; + shellIntegration.enableZshIntegration = true; + + font = { + name = "jetbrains mono nerd font"; + package = pkgs.nerdfonts; + size = 12; + }; + + settings = { + include = "~/.config/kitty/macchiato.conf"; + bold_font = "auto"; + italic_font = "auto"; + bold_italic_font = "auto"; + mouse_hide_wait = "2.0"; + cursor_shape = "block"; + url_color = "#0087bd"; + url_style = "dotted"; + confirm_os_window_close = "0"; + background_opacity = "0.8"; + }; + }; +} diff --git a/hosts/mac-nixos/hyprland/config/kitty/macchiato.conf b/hosts/mac-nixos/hyprland/config/kitty/macchiato.conf new file mode 100644 index 0000000..d50dbe6 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/kitty/macchiato.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin Kitty Macchiato +## author: Catppuccin Org +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/themes/macchiato.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #CAD3F5 +background #24273A +selection_foreground #24273A +selection_background #F4DBD6 + +# Cursor colors +cursor #F4DBD6 +cursor_text_color #24273A + +# URL underline color when hovering with mouse +url_color #F4DBD6 + +# Kitty window border colors +active_border_color #B7BDF8 +inactive_border_color #6E738D +bell_border_color #EED49F + +# OS Window titlebar colors +wayland_titlebar_color #24273A +macos_titlebar_color #24273A + +# Tab bar colors +active_tab_foreground #181926 +active_tab_background #C6A0F6 +inactive_tab_foreground #CAD3F5 +inactive_tab_background #1E2030 +tab_bar_background #181926 + +# Colors for marks (marked text in the terminal) +mark1_foreground #24273A +mark1_background #B7BDF8 +mark2_foreground #24273A +mark2_background #C6A0F6 +mark3_foreground #24273A +mark3_background #7DC4E4 + +# The 16 terminal colors + +# black +color0 #494D64 +color8 #5B6078 + +# red +color1 #ED8796 +color9 #ED8796 + +# green +color2 #A6DA95 +color10 #A6DA95 + +# yellow +color3 #EED49F +color11 #EED49F + +# blue +color4 #8AADF4 +color12 #8AADF4 + +# magenta +color5 #F5BDE6 +color13 #F5BDE6 + +# cyan +color6 #8BD5CA +color14 #8BD5CA + +# white +color7 #B8C0E0 +color15 #A5ADCB diff --git a/hosts/mac-nixos/hyprland/config/mako/default.nix b/hosts/mac-nixos/hyprland/config/mako/default.nix new file mode 100644 index 0000000..1c91120 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/mako/default.nix @@ -0,0 +1,21 @@ +{ + services.mako = { + enable = true; + font = "monospace 12"; + icons = false; + width = 500; + height = 110; + layer = "overlay"; + borderRadius = 15; + borderSize = 2; + maxIconSize = 64; + defaultTimeout = 5000; + sort = "-time"; + ignoreTimeout = true; + + backgroundColor = "#24273a"; + textColor = "#cad3f5"; + borderColor = "#8aadf4"; + progressColor = "over #363a4f"; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/nwg-drawer/drawer.css b/hosts/mac-nixos/hyprland/config/nwg-drawer/drawer.css new file mode 100644 index 0000000..a893075 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/nwg-drawer/drawer.css @@ -0,0 +1,34 @@ +window { + background-color: rgba (36, 47, 79, 0.95); + color: #eeeeee +} + +/* search entry */ +entry { + background-color: rgba (0, 0, 0, 0.2) +} + +button, image { + background: none; + border: none +} + +button:hover { + background-color: rgba (255, 255, 255, 0.1) +} + +/* in case you wanted to give category buttons a different look */ +#category-button { + margin: 0 10px 0 10px +} + +#pinned-box { + padding-bottom: 5px; + border-bottom: 1px dotted gray +} + +#files-box { + padding: 5px; + border: 1px dotted gray; + border-radius: 15px +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/nwg-panel/excluded-dirs b/hosts/mac-nixos/hyprland/config/nwg-panel/excluded-dirs new file mode 100644 index 0000000..e69de29 diff --git a/hosts/mac-nixos/hyprland/config/nwg-panel/preferred-apps.json b/hosts/mac-nixos/hyprland/config/nwg-panel/preferred-apps.json new file mode 100644 index 0000000..224a65e --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/nwg-panel/preferred-apps.json @@ -0,0 +1,8 @@ +{ + "\\.pdf$": "firefox", + "\\.svg$": "inkscape", + "\\.(jpg|png|tiff|gif)$": "swayimg", + "\\.(mp3|ogg|flac|wav|wma)$": "audacious", + "\\.(avi|mp4|mkv|mov|wav)$": "mpv", + "\\.(doc|docx|xls|xlsx)$": "libreoffice" +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/wallpapers/wall.png b/hosts/mac-nixos/hyprland/config/wallpapers/wall.png new file mode 100644 index 0000000..a7f07a9 Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wallpapers/wall.png differ diff --git a/hosts/mac-nixos/hyprland/config/waybar/default.nix b/hosts/mac-nixos/hyprland/config/waybar/default.nix new file mode 100644 index 0000000..d5f5308 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/waybar/default.nix @@ -0,0 +1,302 @@ +{ + # https://github.com/Alexays/Waybar/wiki/Module:-Hyprland + + programs.waybar = { + enable = true; + systemd.enable = true; + settings = { + mainBar = { + layer = "bottom"; + position = "top"; + mod = "dock"; + exclusive = true; + passthrough = false; + gtk-layer-shell = true; + height = 0; + modules-left = [ + "hyprland/workspaces" + ]; + + modules-center = [ + "hyprland/window" + ]; + + modules-right = [ + "tray" + "custom/updates" + "keyboard-state#capslock" + "keyboard-state#numlock" + "pulseaudio" + "pulseaudio#microphone" + "network" + "clock" + "custom/weather" + ]; + + "hyprland/window" = { + format = {}; + }; + + "hyprland/workspaces" = { + disable-scroll = true; + all-outputs = true; + on-click = "activate"; + persistent_workspaces = { + "1" = []; + }; + }; + + "custom/weather" = { + tooltip = true; + format = {}; + interval = 30; + exec = "sudo waybar-weather"; + return-type = "json"; + }; + + "custom/updates" = { + tooltip = true; + format = {}; + interval = 60; + exec = "sudo waybar-updates"; + return-type = "json"; + }; + + tray = { + icon-size = 16; + spacing = 10; + }; + + clock = { + format = "{:%I:%M %p}"; + tooltip-format = "{:%Y %B}\n{calendar}"; + }; + + pulseaudio = { + format = "{icon} {volume}%"; + tooltip = false; + format-muted = " Muted"; + on-click = "pamixer -t"; + on-click-right = "pavucontrol -t 1"; + on-scroll-up = "pamixer -i 5"; + on-scroll-down = "pamixer -d 5"; + scroll-step = 5; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + portable = ""; + car = ""; + default = ["" "" ""]; + }; + }; + + "pulseaudio#microphone" = { + format = "{format_source}"; + format-source = "🎙{volume}%"; + format-source-muted = "🎙Muted"; + on-click = "pamixer --default-source -t"; + on-click-right = "pavucontrol -t 2"; + on-scroll-up = "pamixer --default-source -i 5"; + on-scroll-down = "pamixer --default-source -d 5"; + scroll-step = 5; + }; + + network = { + interface = "wlp9s0"; + format = "{ifname}"; + format-wifi = "{essid} ({signalStrength}%) "; + format-ethernet = "{ifname} "; + format-disconnected = ""; # An empty format will hide the module. + tooltip-format = "{ifname}"; + tooltip-format-wifi = "{essid} ({signalStrength}%) "; + tooltip-format-ethernet = "{ifname} "; + tooltip-format-disconnected = "Disconnected"; + max-length = 50; + }; + + "keyboard-state#capslock" = { + capslock = true; + format = "{name} {icon}"; + format-icons = { + locked = ""; + unlocked = ""; + }; + }; + + "keyboard-state#numlock" = { + numlock = true; + format = "{name} {icon}"; + format-icons = { + locked = ""; + unlocked = ""; + }; + }; + }; + }; + + # https://catppuccin.com/palette + style = '' + * { + border: none; + border-radius: 0; + font-family: + Jetbrains Mono Nerd Font, + monospace; + font-weight: bold; + font-size: 14px; + min-height: 0; + } + + window#waybar { + background: rgba(21, 18, 27, 0); + color: #cdd6f4; + } + + tooltip { + background: #1e1e2e; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #11111b; + } + + #workspaces button { + padding: 5px; + color: #313244; + margin-right: 5px; + } + + #workspaces button.active { + color: #a6adc8; + } + + #workspaces button.focused { + color: #a6adc8; + background: #eba0ac; + border-radius: 10px; + } + + #workspaces button.urgent { + color: #11111b; + background: #a6e3a1; + border-radius: 10px; + } + + #workspaces button:hover { + background: #11111b; + color: #cdd6f4; + border-radius: 10px; + } + + #custom-updates, + #custom-caffeine, + #custom-weather, + #window, + #clock, + #battery, + #pulseaudio, + #network, + #workspaces, + #keyboard-state.numlock, + #keyboard-state.capslock, + #tray, + #backlight { + background: #1e1e2e; + padding: 0px 10px; + margin: 3px 0px; + margin-top: 10px; + border: 1px solid #181825; + } + + #tray { + border-radius: 10px; + margin-right: 10px; + } + + #workspaces { + background: #1e1e2e; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; + } + + #custom-caffeine { + color: #89dceb; + border-radius: 10px 0px 0px 10px; + border-right: 0px; + margin-left: 10px; + } + + #custom-updates { + color: #f5c2e7; + border-radius: 10px 0px 0px 10px; + border-left: 0px; + border-right: 0px; + } + + #window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; + } + + #clock { + color: #f5a97f; + border-radius: 10px 0px 0px 10px; + margin-left: 5px; + border-right: 0px; + } + + #keyboard-state.capslock { + color: #91d7e3; + border-left: 0px; + border-right: 0px; + } + + #keyboard-state.numlock { + color: #7dc4e4; + border-left: 0px; + border-right: 0px; + } + + #network { + color: #eed49f; + border-left: 0px; + border-right: 0px; + border-radius: 10px 10px 10px 10px; + margin-left: 5px; + padding-right: 15px; + } + + #pulseaudio { + color: #8aadf4; + border-left: 0px; + border-right: 0px; + } + + #pulseaudio.microphone { + color: #c6a0f6; + border-radius: 0px 10px 10px 0px; + border-left: 0px; + border-right: 0px; + padding-top: 5px; + } + + #battery { + color: #a6e3a1; + border-radius: 0 10px 10px 0; + margin-right: 10px; + border-left: 0px; + } + + #custom-weather { + border-radius: 0px 10px 10px 0px; + border-right: 0px; + margin-left: 0px; + } + ''; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-updates.py b/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-updates.py new file mode 100755 index 0000000..1f93357 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-updates.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +import os +import json +import subprocess +import re +from datetime import datetime +import time + +tmp_path = '/tmp/waybar-scripts/updates' +json_cache = tmp_path + "/data.json" +git_repo = 'git@github.com:mjallen18/nix-config.git' + +def cache_json(data): + with open(json_cache, mode="w") as cache: + json.dump(data, cache) + +def create_folders(): + if not os.path.exists(tmp_path): + os.makedirs(tmp_path) + os.chdir(tmp_path) + +def clone_repo(): + reset_repo() + if os.path.exists(tmp_path) and len(os.listdir(tmp_path)) == 0: + subprocess.run(["git", "clone", git_repo, tmp_path]) + +def check_for_flake_updates(): + return subprocess.run(["sudo", "nix", "flake", "update", "-I", tmp_path, tmp_path], capture_output=True, text=True) + +def reset_repo(): + if os.path.exists(tmp_path) and not len(os.listdir(tmp_path)) == 0: + subprocess.run(["git", "reset", "--hard"]) + subprocess.run(["git", "pull"]) + +def parse_output(output): + updates_dict = {} + updates = re.findall(r"(• Updated input '(.+)':((\n|\r|\n)(.+\((\d\d\d\d-\d\d-\d\d\)))){2})", output) + for update in updates: + input = re.findall(r"'(.+)':", update[0])[0].strip() + dates = re.findall(r"(\d{4}-\d{2}-\d{2})", update[0]) + updates_dict[input] = dates + return updates_dict + +def check(): + data = {} + # print("create folders") + create_folders() + # print("clone repo") + clone_repo() + # print("checking for updates") + updates = check_for_flake_updates() + updates_dict = parse_output(updates.stderr) + + data["text"] = (str(len(updates_dict.keys()))) + if len(updates_dict.keys()) <= 0: + data["tooltip"] = ("flake inputs up to date") + else: + data["tooltip"] = ("flake input updates:\n\n") + + for input in updates_dict.keys(): + data["tooltip"] += "{}\n".format(input) + data["tooltip"] += "Old Ref: {0} → {1}\n\n".format(updates_dict[input][0].strip(), updates_dict[input][1].strip()) + + cache_json(data) + + print(json.dumps(data)) + +def read_cache(): + with open(json_cache, mode="r") as cache: + print(json.dumps(json.load(cache))) + +def main(): + now = int(datetime.now().strftime("%H")) + if os.path.exists(json_cache): + mtime = int(time.localtime(os.stat(json_cache).st_ctime).tm_hour) + else: + mtime = now + 1 + + if (now % 2 == 0 and mtime < now) or not os.path.exists(json_cache): + check() + else: + read_cache() + +main() diff --git a/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-wttr.py b/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-wttr.py new file mode 100755 index 0000000..a6a87a1 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/waybar/scripts/waybar-wttr.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python + +import json +from datetime import datetime + +import requests + +WEATHER_CODES = { + "113": "☀️ ", + "116": "⛅ ", + "119": "☁️ ", + "122": "☁️ ", + "143": "☁️ ", + "176": "🌧️", + "179": "🌧️", + "182": "🌧️", + "185": "🌧️", + "200": "⛈️ ", + "227": "🌨️", + "230": "🌨️", + "248": "☁️ ", + "260": "☁️ ", + "263": "🌧️", + "266": "🌧️", + "281": "🌧️", + "284": "🌧️", + "293": "🌧️", + "296": "🌧️", + "299": "🌧️", + "302": "🌧️", + "305": "🌧️", + "308": "🌧️", + "311": "🌧️", + "314": "🌧️", + "317": "🌧️", + "320": "🌨️", + "323": "🌨️", + "326": "🌨️", + "329": "❄️ ", + "332": "❄️ ", + "335": "❄️ ", + "338": "❄️ ", + "350": "🌧️", + "353": "🌧️", + "356": "🌧️", + "359": "🌧️", + "362": "🌧️", + "365": "🌧️", + "368": "🌧️", + "371": "❄️", + "374": "🌨️", + "377": "🌨️", + "386": "🌨️", + "389": "🌨️", + "392": "🌧️", + "395": "❄️ ", +} + +data = {} + + +weather = requests.get("https://wttr.in/?format=j1").json() + + +def format_time(time): + return datetime.strptime(format_24_time(time), "%H").strftime("%I %p") + +def format_24_time(time): + return time.replace("00", "").zfill(2) + + +def format_temp(temp): + return (hour["FeelsLikeF"] + "°").ljust(3) + + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind", + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event] + " " + hour[event] + "%") + return ", ".join(conditions) + + +tempint = int(weather["current_condition"][0]["FeelsLikeF"]) +extrachar = "" +if tempint > 0 and tempint < 10: + extrachar = "+" + + +data["text"] = ( + " " + + WEATHER_CODES[weather["current_condition"][0]["weatherCode"]] + + " " + + extrachar + + weather["current_condition"][0]["FeelsLikeF"] + + "°" +) + +data["tooltip"] = ( + f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_F']}°\n" +) +data["tooltip"] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n" +data["tooltip"] += f"Wind: {weather['current_condition'][0]['windspeedMiles']}mph\n" +data["tooltip"] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather["weather"]): + data["tooltip"] += f"\n" + if i == 0: + data["tooltip"] += "Today, " + if i == 1: + data["tooltip"] += "Tomorrow, " + date = datetime.strptime(day['date'], "%Y-%m-%d").strftime("%a %b %d %Y") + data["tooltip"] += f"{date}\n" + data["tooltip"] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° " + data[ + "tooltip" + ] += f"☀️ {day['astronomy'][0]['sunrise']} 🌕 {day['astronomy'][0]['sunset']}\n" + for hour in day["hourly"]: + if i == 0: + if int(format_24_time(hour["time"])) < datetime.now().hour - 2: + continue + data[ + "tooltip" + ] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" + + +print(json.dumps(data)) diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/hibernate.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/hibernate.png new file mode 100644 index 0000000..1aa6730 Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/hibernate.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/lock.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/lock.png new file mode 100644 index 0000000..2fdf2de Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/lock.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/logout.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/logout.png new file mode 100644 index 0000000..c398d22 Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/logout.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/reboot.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/reboot.png new file mode 100644 index 0000000..6db3aaa Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/reboot.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/shutdown.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/shutdown.png new file mode 100644 index 0000000..3025cd0 Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/shutdown.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/icons/suspend.png b/hosts/mac-nixos/hyprland/config/wlogout/icons/suspend.png new file mode 100644 index 0000000..124a58e Binary files /dev/null and b/hosts/mac-nixos/hyprland/config/wlogout/icons/suspend.png differ diff --git a/hosts/mac-nixos/hyprland/config/wlogout/layout b/hosts/mac-nixos/hyprland/config/wlogout/layout new file mode 100644 index 0000000..6e546a1 --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/wlogout/layout @@ -0,0 +1,36 @@ +{ + "label" : "lock", + "action" : "swaylock", + "text" : "Lock", + "keybind" : "l" +} +{ + "label" : "hibernate", + "action" : "systemctl hibernate", + "text" : "Hibernate", + "keybind" : "h" +} +{ + "label" : "logout", + "action" : "sleep 1; hyprctl dispatch exit", + "text" : "Logout", + "keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown", + "keybind" : "s" +} +{ + "label" : "suspend", + "action" : "systemctl suspend", + "text" : "Suspend", + "keybind" : "u" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot", + "keybind" : "r" +} diff --git a/hosts/mac-nixos/hyprland/config/wlogout/style.css b/hosts/mac-nixos/hyprland/config/wlogout/style.css new file mode 100644 index 0000000..5ba48fe --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/wlogout/style.css @@ -0,0 +1,50 @@ +* { + background-image: none; +} + +window { + background-color: rgba(36, 39, 58, 0.9); +} + +button { + margin: 8px; + color: #cad3f5; + background-color: #363a4f; + border-style: solid; + border-width: 2px; + background-repeat: no-repeat; + background-position: center; + background-size: 25%; +} + +button:active, +button:focus, +button:hover { + color: #8bd5ca; + background-color: #24273a; + outline-style: none; +} + +#lock { + background-image: image(url("icons/lock.png")); +} + +#logout { + background-image: image(url("icons/logout.png")); +} + +#suspend { + background-image: image(url("icons/suspend.png")); +} + +#hibernate { + background-image: image(url("icons/hibernate.png")); +} + +#shutdown { + background-image: image(url("icons/shutdown.png")); +} + +#reboot { + background-image: image(url("icons/reboot.png")); +} diff --git a/hosts/mac-nixos/hyprland/config/wofi/default.nix b/hosts/mac-nixos/hyprland/config/wofi/default.nix new file mode 100644 index 0000000..08abc1b --- /dev/null +++ b/hosts/mac-nixos/hyprland/config/wofi/default.nix @@ -0,0 +1,145 @@ +{ + programs.wofi = { + enable = false; + style = '' + @define-color rosewater #f4dbd6; + @define-color rosewater-rgb rgb(244, 219, 214); + @define-color flamingo #f0c6c6; + @define-color flamingo-rgb rgb(240, 198, 198); + @define-color pink #f5bde6; + @define-color pink-rgb rgb(245, 189, 230); + @define-color mauve #c6a0f6; + @define-color mauve-rgb rgb(198, 160, 246); + @define-color red #ed8796; + @define-color red-rgb rgb(237, 135, 150); + @define-color maroon #ee99a0; + @define-color maroon-rgb rgb(238, 153, 160); + @define-color peach #f5a97f; + @define-color peach-rgb rgb(245, 169, 127); + @define-color yellow #eed49f; + @define-color yellow-rgb rgb(238, 212, 159); + @define-color green #a6da95; + @define-color green-rgb rgb(166, 218, 149); + @define-color teal #8bd5ca; + @define-color teal-rgb rgb(139, 213, 202); + @define-color sky #91d7e3; + @define-color sky-rgb rgb(145, 215, 227); + @define-color sapphire #7dc4e4; + @define-color sapphire-rgb rgb(125, 196, 228); + @define-color blue #8aadf4; + @define-color blue-rgb rgb(138, 173, 244); + @define-color lavender #b7bdf8; + @define-color lavender-rgb rgb(183, 189, 248); + @define-color text #cad3f5; + @define-color text-rgb rgb(202, 211, 245); + @define-color subtext1 #b8c0e0; + @define-color subtext1-rgb rgb(184, 192, 224); + @define-color subtext0 #a5adcb; + @define-color subtext0-rgb rgb(165, 173, 203); + @define-color overlay2 #939ab7; + @define-color overlay2-rgb rgb(147, 154, 183); + @define-color overlay1 #8087a2; + @define-color overlay1-rgb rgb(128, 135, 162); + @define-color overlay0 #6e738d; + @define-color overlay0-rgb rgb(110, 115, 141); + @define-color surface2 #5b6078; + @define-color surface2-rgb rgb(91, 96, 120); + @define-color surface1 #494d64; + @define-color surface1-rgb rgb(73, 77, 100); + @define-color surface0 #363a4f; + @define-color surface0-rgb rgb(54, 58, 79); + @define-color base #24273a; + @define-color base-rgb rgb(36, 39, 58); + @define-color mantle #1e2030; + @define-color mantle-rgb rgb(30, 32, 48); + @define-color crust #181926; + @define-color crust-rgb rgb(24, 25, 38); + + * { + font-family: "Inconsolata Nerd Font", monospace; + font-size: 14px; + } + + /* Window */ + window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + } + + /* Inner Box */ + #inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + } + + /* Outer Box */ + #outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + } + + /* Scroll */ + #scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; + } + + /* Input */ + #input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + } + + #input image { + border: none; + color: @red; + } + + #input * { + outline: 4px solid @red!important; + } + + /* Text */ + #text { + margin: 5px; + border: none; + color: @text; + } + + #entry { + background-color: @base; + } + + #entry arrow { + border: none; + color: @lavender; + } + + /* Selected Entry */ + #entry:selected { + border: 0.11em solid @lavender; + } + + #entry:selected #text { + color: @mauve; + } + + #entry:drop(active) { + background-color: @lavender!important; + } + ''; + }; +} \ No newline at end of file diff --git a/hosts/mac-nixos/hyprland/default.nix b/hosts/mac-nixos/hyprland/default.nix new file mode 100644 index 0000000..62083d1 --- /dev/null +++ b/hosts/mac-nixos/hyprland/default.nix @@ -0,0 +1,103 @@ +{ pkgs, ... }: +let + sddmTheme = "catppuccin-mocha"; +in +{ + specialisation.hyprland.configuration = { + imports = [ + ./environment.nix + ]; + + home-manager.users.matt = import ./home.nix; + + services = { + displayManager.sddm.enable = true; + displayManager.sddm.package = pkgs.kdePackages.sddm; + displayManager.sddm.theme = sddmTheme; + displayManager.defaultSession = "hyprland"; + # disable plasma + desktopManager.plasma6.enable = false; + + dbus.enable = true; + + ddccontrol.enable = true; + }; + + programs.hyprland = { + enable = true; + xwayland.enable = true; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + }; + + systemd = { + user.services.polkit-gnome-authentication-agent-1 = { + description = "polkit-gnome-authentication-agent-1"; + wantedBy = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + after = [ "graphical-session.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; + Restart = "on-failure"; + RestartSec = 1; + TimeoutStopSec = 10; + }; + }; + extraConfig = '' + DefaultTimeoutStopSec=10s + ''; + }; + + security = { + polkit.enable = true; + + # configure sudo + sudo.extraRules = [ + { + commands = [ + { + command = "/run/current-system/sw/bin/waybar-weather"; + options = [ "NOPASSWD" ]; + } + { + command = "/run/current-system/sw/bin/waybar-updates"; + options = [ "NOPASSWD" ]; + } + ]; + groups = [ "wheel" ]; + } + ]; + }; + + xdg.portal = { + enable = true; + wlr.enable = false; + xdgOpenUsePortal = false; + extraPortals = [ + pkgs.xdg-desktop-portal-hyprland + pkgs.xdg-desktop-portal-gtk + ]; + }; + + fonts.packages = with pkgs; [ + noto-fonts + noto-fonts-color-emoji + nerdfonts + meslo-lgs-nf + ]; + + fonts.fontconfig.defaultFonts = { + emoji = [ + "Noto Color Emoji" + ]; + }; + + nixpkgs.overlays = [ + (self: super: { + waybar = super.waybar.overrideAttrs (oldAttrs: { + mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; + }); + }) + ]; + }; +} diff --git a/hosts/mac-nixos/hyprland/environment.nix b/hosts/mac-nixos/hyprland/environment.nix new file mode 100644 index 0000000..457acd7 --- /dev/null +++ b/hosts/mac-nixos/hyprland/environment.nix @@ -0,0 +1,61 @@ +{ pkgs, ... }: +let + + waybarWeatherScript = pkgs.writeScriptBin "waybar-weather" '' + #!/usr/bin/env nix-shell + #! nix-shell -i bash --packages python3 python3Packages.requests + python /home/matt/.config/waybar/scripts/waybar-wttr.py + ''; + + waybarUpdatesScript = pkgs.writeScriptBin "waybar-updates" '' + /home/matt/.config/waybar/scripts/waybar-updates.py + ''; +in +{ + environment.systemPackages = with pkgs; [ + adwaita-icon-theme + apple-cursor + catppuccin + catppuccin-gtk + catppuccin-qt5ct + catppuccin-sddm + colloid-gtk-theme + colloid-icon-theme + ddcutil + dunst + glib + gnome-disk-utility + gsettings-desktop-schemas + hyprland + hyprshot + libnotify + mako + meson + nautilus + networkmanagerapplet + nwg-drawer + nwg-look + pamixer + papirus-folders + pavucontrol + playerctl + polkit + polkit_gnome + qt5.qtwayland + qt6.qtwayland + rofi-wayland + waybar + waybarUpdatesScript + waybarWeatherScript + wayland-protocols + wayland-utils + wev + wl-clipboard + wlogout + wlroots + xdg-desktop-portal-hyprland + xdg-desktop-portal-gtk + xdg-desktop-portal-wlr + xwayland + ]; +} diff --git a/hosts/mac-nixos/hyprland/home.nix b/hosts/mac-nixos/hyprland/home.nix new file mode 100644 index 0000000..1fee0d4 --- /dev/null +++ b/hosts/mac-nixos/hyprland/home.nix @@ -0,0 +1,181 @@ +{ pkgs, ... }: +let + wallpaper = "/home/matt/.config/wallpapers/wall.png"; + cursorTheme = "macOS-Monterey"; + cursorThemePkg = pkgs.apple-cursor; + cursorSize = 24; + gtkThemeSize = "compact"; + gtkThemeAccent = "blue"; + gtkThemeVariant = "macchiato"; + gtkTheme = "catppuccin-${gtkThemeVariant}-${gtkThemeAccent}-${gtkThemeSize}"; + gtkThemePkg = pkgs.catppuccin-gtk.override { + size = gtkThemeSize; + accents = [ gtkThemeAccent ]; + variant = gtkThemeVariant; + }; + iconTheme = "Colloid-dark"; # Colloid, Colloid-light, Colloid-dark + iconThemePkg = pkgs.colloid-icon-theme; +in +{ + imports = [ + ./config.nix + ./config/btop + ./config/hypr + ./config/kitty + ./config/mako + ./config/waybar + ./config/wofi + ]; + + services = { + hyprpaper = { + enable = true; + settings = { + preload = [ wallpaper ]; + wallpaper = [ + "DP-1, ${wallpaper}" + "DP-2, ${wallpaper}" + ]; + splash = false; + }; + }; + + hypridle = { + enable = true; + settings = { + general = { + 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. + ignore_dbus_inhibit = false; + lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances. + }; + listener = [ + # { + # timeout = 300; # 5min + # on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. + # on-resume = "brightnessctl -r"; # monitor backlight restore. + # } + { + timeout = 900; # 15 min + on-timeout = "loginctl lock-session"; # lock screen when timeout has passed + } + { + timeout = 930; # 15.5 min + on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed + on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired. + } + { + timeout = 3600; # 1hr + on-timeout = "systemctl suspend"; # suspend pc + } + ]; + }; + }; + }; + + programs.hyprlock = { + enable = true; + settings = { + background = [ + { + monitor = ""; + path = wallpaper; # supports png, jpg, webp (no animations, though) + color = "rgba(25, 20, 20, 1.0)"; + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_passes = "3"; # 0 disables blurring + blur_size = "7"; + noise = "0.0117"; + contrast = "0.8916"; + brightness = "0.8172"; + vibrancy = "0.1696"; + vibrancy_darkness = "0.0"; + } + ]; + input-field = [ + { + size = "200, 50"; + position = "0, -80"; + monitor = "DP-1"; + dots_center = true; + fade_on_empty = true; + font_color = "rgb(202, 211, 245)"; + inner_color = "rgb(91, 96, 120)"; + outer_color = "rgb(24, 25, 38)"; + bothlock_color = -1; + outline_thickness = 5; + placeholder_text = ''Password...''; + shadow_passes = 2; + } + ]; + }; + }; + + home.sessionVariables = { + BROWSER = "firefox"; + EDITOR = "nano"; + TERMINAL = "kitty"; + NIXOS_OZONE_WL = "1"; + QT_QPA_PLATFORMTHEME = "gtk3"; + QT_SCALE_FACTOR = "1"; + MOZ_ENABLE_WAYLAND = "1"; + SDL_VIDEODRIVER = "wayland"; + QT_QPA_PLATFORM = "wayland-egl"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + GTK_CSD = "0"; +# WLR_DRM_DEVICES = "/dev/dri/card0"; +# WLR_NO_HARDWARE_CURSORS = "1"; + CLUTTER_BACKEND = "wayland"; + # WLR_RENDERER = "vulkan"; + XCURSOR_THEME = cursorTheme; + XCURSOR_SIZE = cursorSize; + GTK_THEME = gtkTheme; + XDG_CURRENT_DESKTOP = "Hyprland"; + XDG_SESSION_DESKTOP = "Hyprland"; + XDG_SESSION_TYPE = "wayland"; + GTK_USE_PORTAL = "1"; + NIXOS_XDG_OPEN_USE_PORTAL = "1"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + #XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + }; + + home.pointerCursor = { + gtk.enable = true; + package = cursorThemePkg; + name = cursorTheme; + size = cursorSize; + }; + + gtk = { + enable = true; + + cursorTheme = { + name = cursorTheme; # macOS-[BigSur, Monterey]-[ , White, White-Windows, Windows] + package = cursorThemePkg; + }; + + theme = { + name = gtkTheme; + package = gtkThemePkg; + }; + + iconTheme = { + name = iconTheme; + package = iconThemePkg; + }; + + gtk3.extraConfig = { + # gtk-application-prefer-dark-theme = true; + "AdwStyleManager:color-scheme" = "ADW_COLOR_SCHEME_PREFER_DARK"; + }; + + gtk4.extraConfig = { + # gtk-application-prefer-dark-theme = true; + "AdwStyleManager:color-scheme" = "ADW_COLOR_SCHEME_PREFER_DARK"; + }; + + }; +} \ No newline at end of file