From 72ba8ddf59cf4a5cd4bf5f862500eca09eddbc48 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Thu, 27 Mar 2025 08:44:40 -0400 Subject: [PATCH] add util desktop --- flake.nix | 15 + home-manager/btop/config/btop.conf | 218 +++++++++++++ .../btop/config/catppuccin_mocha.theme | 83 +++++ home-manager/btop/default.nix | 10 + home-manager/ghostty/config/ghostty.conf | 2 +- home-manager/home.nix | 33 +- home-manager/htop/config/htoprc | 51 --- home-manager/htop/default.nix | 5 - home-manager/hyprland/config/hyprland.conf | 296 ++++++++++++++++++ home-manager/hyprland/default.nix | 8 + home-manager/nvim/default.nix | 5 +- home-manager/waybar/config/style.css | 88 ++++++ home-manager/waybar/default.nix | 114 +++++++ hosts/utility-desktop.nix | 57 ++++ 14 files changed, 905 insertions(+), 80 deletions(-) create mode 100644 home-manager/btop/config/btop.conf create mode 100644 home-manager/btop/config/catppuccin_mocha.theme create mode 100644 home-manager/btop/default.nix delete mode 100644 home-manager/htop/config/htoprc delete mode 100644 home-manager/htop/default.nix create mode 100644 home-manager/hyprland/config/hyprland.conf create mode 100644 home-manager/hyprland/default.nix create mode 100644 home-manager/waybar/config/style.css create mode 100644 home-manager/waybar/default.nix create mode 100644 hosts/utility-desktop.nix diff --git a/flake.nix b/flake.nix index 5d30a72..7b39d9f 100644 --- a/flake.nix +++ b/flake.nix @@ -61,6 +61,21 @@ }; }; + # Utility Room Desktop + lin-va-utility = mkSystem { + systemConfig = ./hosts/utility-desktop.nix; + moduleConfig = { + hostName = "lin-va-utility"; + mainDiskID = "/dev/disk/by-id/nvme-eui.0026b768429d3eb5"; + network = { + interface = "eno1"; + address = "10.0.20.50"; + defaultGateway = "10.0.20.254"; + nameservers = [ "10.0.20.254" ]; + }; + }; + }; + # Nix Builder lin-va-nix-builder = mkSystem { systemConfig = ./hosts/builder.nix; diff --git a/home-manager/btop/config/btop.conf b/home-manager/btop/config/btop.conf new file mode 100644 index 0000000..8b70908 --- /dev/null +++ b/home-manager/btop/config/btop.conf @@ -0,0 +1,218 @@ +#? Config file for btop v. 1.4.0 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "catppuccin_mocha" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = True + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = True + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = False + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = False + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = True + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 2000 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = False + +#* Show processes as a tree. +proc_tree = False + +#* Use the cpu graph colors in the process list. +proc_colors = True + +#* Use a darkening gradient in the process list. +proc_gradient = True + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = False + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = True + +#* Show cpu graph for each process. +proc_cpu_graphs = True + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = False + +#* Show proc box on left side of screen instead of right. +proc_left = False + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = False + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = False + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = True + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = False + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = False + +#* Shows the system uptime in the CPU box. +show_uptime = True + +#* Show cpu temperature. +check_temp = True + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = True + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = False + +#* Show CPU frequency. +show_cpu_freq = True + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = True + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = True + +#* Show mem box below net box instead of above. +mem_below_net = False + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = True + +#* If swap memory should be shown in memory box. +show_swap = True + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = True + +#* If mem box should be split to also show disks info. +show_disks = True + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = True + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = True + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + +#* Set to true to show available disk space for privileged users. +disk_free_priv = False + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = True + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = False + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = False + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = True + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = True + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* Show battery stats in top right if battery is present. +show_battery = True + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = True + +#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" diff --git a/home-manager/btop/config/catppuccin_mocha.theme b/home-manager/btop/config/catppuccin_mocha.theme new file mode 100644 index 0000000..6915504 --- /dev/null +++ b/home-manager/btop/config/catppuccin_mocha.theme @@ -0,0 +1,83 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#1E1E2E" + +# Main text color +theme[main_fg]="#CDD6F4" + +# Title color for boxes +theme[title]="#CDD6F4" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#89B4FA" + +# Background color of selected item in processes box +theme[selected_bg]="#45475A" + +# Foreground color of selected item in processes box +theme[selected_fg]="#89B4FA" + +# Color of inactive/disabled text +theme[inactive_fg]="#7F849C" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#F5E0DC" + +# Background color of the percentage meters +theme[meter_bg]="#45475A" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#F5E0DC" + +# CPU, Memory, Network, Proc box outline colors +theme[cpu_box]="#cba6f7" #Mauve +theme[mem_box]="#a6e3a1" #Green +theme[net_box]="#eba0ac" #Maroon +theme[proc_box]="#89b4fa" #Blue + +# Box divider line and small boxes line color +theme[div_line]="#6C7086" + +# Temperature graph color (Green -> Yellow -> Red) +theme[temp_start]="#a6e3a1" +theme[temp_mid]="#f9e2af" +theme[temp_end]="#f38ba8" + +# CPU graph colors (Teal -> Lavender) +theme[cpu_start]="#94e2d5" +theme[cpu_mid]="#74c7ec" +theme[cpu_end]="#b4befe" + +# Mem/Disk free meter (Mauve -> Lavender -> Blue) +theme[free_start]="#cba6f7" +theme[free_mid]="#b4befe" +theme[free_end]="#89b4fa" + +# Mem/Disk cached meter (Sapphire -> Lavender) +theme[cached_start]="#74c7ec" +theme[cached_mid]="#89b4fa" +theme[cached_end]="#b4befe" + +# Mem/Disk available meter (Peach -> Red) +theme[available_start]="#fab387" +theme[available_mid]="#eba0ac" +theme[available_end]="#f38ba8" + +# Mem/Disk used meter (Green -> Sky) +theme[used_start]="#a6e3a1" +theme[used_mid]="#94e2d5" +theme[used_end]="#89dceb" + +# Download graph colors (Peach -> Red) +theme[download_start]="#fab387" +theme[download_mid]="#eba0ac" +theme[download_end]="#f38ba8" + +# Upload graph colors (Green -> Sky) +theme[upload_start]="#a6e3a1" +theme[upload_mid]="#94e2d5" +theme[upload_end]="#89dceb" + +# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) +theme[process_start]="#74C7EC" +theme[process_mid]="#89DCEB" +theme[process_end]="#cba6f7" diff --git a/home-manager/btop/default.nix b/home-manager/btop/default.nix new file mode 100644 index 0000000..04df897 --- /dev/null +++ b/home-manager/btop/default.nix @@ -0,0 +1,10 @@ +{ + programs.btop = { + enable = true; + }; + + home.file.".config/btop/btop.conf".text = + builtins.readFile ./config/btop.conf; + home.file.".config/btop/themes/catppuccin_mocha.theme".text = + builtins.readFile ./config/catppuccin_mocha.theme; +} diff --git a/home-manager/ghostty/config/ghostty.conf b/home-manager/ghostty/config/ghostty.conf index abdcc63..b5d687d 100644 --- a/home-manager/ghostty/config/ghostty.conf +++ b/home-manager/ghostty/config/ghostty.conf @@ -1,4 +1,4 @@ -command = /Users/evanreichard/.nix-profile/bin/bash --login +command = bash --login macos-titlebar-style = tabs auto-update = off font-family = "MesloLGM Nerd Font Mono" diff --git a/home-manager/home.nix b/home-manager/home.nix index 012addd..87bfced 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,26 +1,28 @@ { pkgs, ... }: let - inherit (pkgs.lib) optionals; + inherit (pkgs.lib) optionals mkForce; inherit (pkgs.stdenv) isLinux isDarwin; in { imports = [ ./bash + ./btop ./direnv + ./fastfetch ./ghostty ./git - ./htop - ./fastfetch ./nvim ./powerline ./readline + ./hyprland + ./waybar ]; # Home Manager Config - home.username = "evanreichard"; - home.homeDirectory = "/Users/evanreichard"; home.stateVersion = "24.11"; + home.username = "evanreichard"; + home.homeDirectory = mkForce (if isLinux then "/home/evanreichard" else "/Users/evanreichard"); programs.home-manager.enable = true; # Global Packages @@ -37,16 +39,6 @@ in imagemagick kubectl kubernetes-helm - (llama-cpp.overrideAttrs { - version = "b4539"; - src = pkgs.fetchFromGitHub { - owner = "ggerganov"; - repo = "llama.cpp"; - tag = "b4539"; - hash = "sha256-zPWx8gdai8OfoBCr2X2oJYg45ipLselYZMrL+MbQ1AY="; - leaveDotGit = true; - }; - }) mosh pre-commit python311 @@ -55,8 +47,12 @@ in thefuck tldr ] - ++ optionals isDarwin [ ] - ++ optionals isLinux [ ]; + ++ optionals isLinux [ + ghostty + hyprpaper + firefox + ] + ++ optionals isDarwin [ ]; # GitHub CLI programs.gh = { @@ -67,14 +63,13 @@ in }; # Misc Programs - programs.htop.enable = true; programs.jq.enable = true; programs.k9s.enable = true; programs.pandoc.enable = true; # Enable Flakes & Commands nix = { - package = pkgs.nix; + package = mkForce pkgs.nix; settings = { experimental-features = "nix-command flakes"; }; diff --git a/home-manager/htop/config/htoprc b/home-manager/htop/config/htoprc deleted file mode 100644 index 658096c..0000000 --- a/home-manager/htop/config/htoprc +++ /dev/null @@ -1,51 +0,0 @@ -# Beware! This file is rewritten by htop when settings are changed in the interface. -# The parser is also very primitive, and not human-friendly. -htop_version=3.2.1 -config_reader_min_version=3 -fields=0 48 17 18 38 39 2 46 47 49 1 -hide_kernel_threads=1 -hide_userland_threads=0 -shadow_other_users=0 -show_thread_names=0 -show_program_path=1 -highlight_base_name=0 -highlight_deleted_exe=1 -highlight_megabytes=1 -highlight_threads=1 -highlight_changes=0 -highlight_changes_delay_secs=5 -find_comm_in_cmdline=1 -strip_exe_from_cmdline=1 -show_merged_command=0 -header_margin=1 -screen_tabs=1 -detailed_cpu_time=0 -cpu_count_from_one=0 -show_cpu_usage=1 -show_cpu_frequency=0 -update_process_names=0 -account_guest_in_cpu_meter=0 -color_scheme=6 -enable_mouse=1 -delay=15 -hide_function_bar=0 -header_layout=two_50_50 -column_meters_0=LeftCPUs Memory Swap -column_meter_modes_0=1 1 1 -column_meters_1=RightCPUs Tasks LoadAverage Uptime -column_meter_modes_1=1 2 2 2 -tree_view=0 -sort_key=46 -tree_sort_key=0 -sort_direction=-1 -tree_sort_direction=1 -tree_view_always_by_pid=0 -all_branches_collapsed=0 -screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command -.sort_key=PERCENT_CPU -.tree_sort_key=PID -.tree_view=0 -.tree_view_always_by_pid=0 -.sort_direction=-1 -.tree_sort_direction=1 -.all_branches_collapsed=0 diff --git a/home-manager/htop/default.nix b/home-manager/htop/default.nix deleted file mode 100644 index 1602282..0000000 --- a/home-manager/htop/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - xdg.configFile."htop/htoprc" = { - source = ./config/htoprc; - }; -} diff --git a/home-manager/hyprland/config/hyprland.conf b/home-manager/hyprland/config/hyprland.conf new file mode 100644 index 0000000..30d57c1 --- /dev/null +++ b/home-manager/hyprland/config/hyprland.conf @@ -0,0 +1,296 @@ + +# ####################################################################################### +# AUTOGENERATED HYPR CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# This is an example Hyprland config file. +# Refer to the wiki for more information. +# https://wiki.hyprland.org/Configuring/ + +# Please note not all available settings / options are set here. +# For a full list, see the wiki + +# You can split this configuration into multiple files +# Create your files separately and then link them to this file like this: +# source = ~/.config/hypr/myColors.conf + + +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1.0 +# monitor=HDMI-A-1,1920x1080,0x0,1 + + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = ghostty +$fileManager = dolphin +$menu = wofi --show drun + + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: + +# exec-once = $terminal +# exec-once = nm-applet & +exec-once = waybar & $terminal & firefox + + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 + + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 5 + gaps_out = 20 + + border_size = 2 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 10 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 1.0 + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = yes, please :) + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, easeOutQuint, fade + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 1.94, almostLinear, fade + animation = workspacesIn, 1, 1.21, almostLinear, fade + animation = workspacesOut, 1, 1.94, almostLinear, fade +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] +# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] +# windowrulev2 = rounding 0, floating:0, onworkspace:f[1] + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +################### +### KEYBINDINGS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ + +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrulev2 = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/home-manager/hyprland/default.nix b/home-manager/hyprland/default.nix new file mode 100644 index 0000000..31cd74b --- /dev/null +++ b/home-manager/hyprland/default.nix @@ -0,0 +1,8 @@ +{ pkgs, lib, ... }: + +lib.mkIf pkgs.stdenv.isLinux { + wayland.windowManager.hyprland = { + enable = true; + extraConfig = builtins.readFile ./config/hyprland.conf; + }; +} diff --git a/home-manager/nvim/default.nix b/home-manager/nvim/default.nix index bfd4648..24b25b2 100644 --- a/home-manager/nvim/default.nix +++ b/home-manager/nvim/default.nix @@ -1,7 +1,4 @@ { pkgs, ... }: -let - unstable = import { }; -in { programs.neovim = { enable = true; @@ -157,7 +154,7 @@ in nodePackages.typescript-language-server nodePackages.vscode-langservers-extracted pyright - unstable.eslint_d + eslint_d # Formatters luaformatter diff --git a/home-manager/waybar/config/style.css b/home-manager/waybar/config/style.css new file mode 100644 index 0000000..1a2fefa --- /dev/null +++ b/home-manager/waybar/config/style.css @@ -0,0 +1,88 @@ +* { + border: none; + border-radius: 0; + font-family: + Cartograph CF Nerd Font, + monospace; + font-weight: bold; + font-size: 14px; + min-height: 0; +} + +window#waybar { + background: rgba(21, 18, 27, 0); + color: #cdd6f4; +} + +tooltip { +} + +#workspaces button { +} + +#workspaces button.active { + color: #9ccfd8; +} + +#workspaces button.focused { + color: #9ccfd8; +} + +#workspaces button.urgent { +} + +#workspaces button:hover { +} + +#custom-language, +#custom-updates, +#custom-caffeine, +#custom-weather, +#window, +#clock, +#battery, +#pulseaudio, +#network, +#workspaces, +#tray, +#backlight { +} + +#tray { +} + +#workspaces { +} + +#custom-caffeine { +} + +#custom-language { +} + +#custom-updates { +} + +#window { +} + +#clock { +} + +#network { +} + +#pulseaudio { +} + +#pulseaudio.microphone { +} + +#battery { +} + +#custom-weather { +} + +#custom-endright { +} diff --git a/home-manager/waybar/default.nix b/home-manager/waybar/default.nix new file mode 100644 index 0000000..5e86e90 --- /dev/null +++ b/home-manager/waybar/default.nix @@ -0,0 +1,114 @@ +{ lib, pkgs, ... }: +lib.mkIf pkgs.stdenv.isLinux { + programs.waybar = { + enable = true; + style = builtins.readFile ./config/style.css; + settings = [{ + layer = "top"; + position = "top"; + mod = "dock"; + exclusive = true; + passtrough = false; + gtk-layer-shell = true; + height = 0; + modules-left = [ + "hyprland/workspaces" + "custom/divider" + "custom/divider" + "cpu" + "custom/divider" + "memory" + ]; + modules-center = [ "hyprland/window" ]; + modules-right = [ + "tray" + "network" + "custom/divider" + "backlight" + "custom/divider" + "pulseaudio" + "custom/divider" + "battery" + "custom/divider" + "clock" + ]; + "hyprland/window" = { format = "{}"; }; + "wlr/workspaces" = { + on-scroll-up = "hyprctl dispatch workspace e+1"; + on-scroll-down = "hyprctl dispatch workspace e-1"; + all-outputs = true; + on-click = "activate"; + }; + battery = { format = "󰁹 {}%"; }; + cpu = { + interval = 10; + format = "󰻠 {}%"; + max-length = 10; + on-click = ""; + }; + memory = { + interval = 30; + format = "  {}%"; + format-alt = " {used:0.1f}G"; + max-length = 10; + }; + backlight = { + format = "󰖨 {}"; + device = "acpi_video0"; + }; + tray = { + icon-size = 13; + tooltip = false; + spacing = 10; + }; + network = { + format = "󰖩 {essid}"; + format-disconnected = "󰖪 disconnected"; + }; + clock = { + format = " {:%I:%M %p  %m/%d} "; + tooltip-format = '' + {:%Y %B} + {calendar}''; + }; + pulseaudio = { + format = "{icon} {volume}%"; + tooltip = false; + format-muted = " Muted"; + on-click = "pamixer -t"; + 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}"; + tooltip = false; + format-source = " {volume}%"; + format-source-muted = " Muted"; + on-click = "pamixer --default-source -t"; + on-scroll-up = "pamixer --default-source -i 5"; + on-scroll-down = "pamixer --default-source -d 5"; + scroll-step = 5; + }; + "custom/divider" = { + format = " | "; + interval = "once"; + tooltip = false; + }; + "custom/endright" = { + format = "_"; + interval = "once"; + tooltip = false; + }; + }]; + }; +} diff --git a/hosts/utility-desktop.nix b/hosts/utility-desktop.nix new file mode 100644 index 0000000..5da1119 --- /dev/null +++ b/hosts/utility-desktop.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: + +let + home-manager = builtins.fetchTarball { + url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz"; + sha256 = "156hc11bb6xiypj65q6gzkhw1gw31dwv6dfh6rnv20hgig1sbfld"; + }; +in +{ + imports = [ + "${home-manager}/nixos" + ]; + + # Enable Graphics + hardware.graphics = { + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ vaapiIntel intel-media-driver ]; + }; + + # User Configuration + users.users.evanreichard = { + isNormalUser = true; + home = "/home/evanreichard"; + group = "evanreichard"; + extraGroups = [ "wheel" "networkmanager" "video" ]; + shell = pkgs.bash; + }; + users.groups.evanreichard = { }; + + # Home Manager + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.evanreichard = import ../home-manager/home.nix; + }; + + # Enable HyprLand + programs.hyprland = { + enable = true; + withUWSM = true; + }; + + # Networking Configuration + networking.firewall = { + enable = true; + }; + + # System Packages + environment.systemPackages = with pkgs; [ + ghostty + htop + tmux + vim + wget + ]; +}