From 5cd18d4fcb6ffbe88f7213d62885d4dfbf6ef2af Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Mon, 30 Jun 2025 23:39:41 -0700 Subject: [PATCH 1/7] Home manager global settings, user settings for caperren, and dotfiles for kanshi and wlogout --- flake.nix | 22 ---------------- hosts/cap-nr200p/configuration.nix | 1 + hosts/cap-slim7/configuration.nix | 1 + modules/system/home-manager-settings.nix | 5 ++++ users/caperren/caperren.nix | 21 ++++++++++++++- .../dotfiles/kanshi/cap-nr200p/config | 1 + .../caperren/dotfiles/kanshi/cap-slim7/config | 26 +++++++++++++++++++ users/caperren/dotfiles/wlogout/layout | 24 +++++++++++++++++ 8 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 modules/system/home-manager-settings.nix create mode 100644 users/caperren/dotfiles/kanshi/cap-nr200p/config create mode 100644 users/caperren/dotfiles/kanshi/cap-slim7/config create mode 100644 users/caperren/dotfiles/wlogout/layout diff --git a/flake.nix b/flake.nix index e5701f0..ecdf6c8 100644 --- a/flake.nix +++ b/flake.nix @@ -40,27 +40,5 @@ inputs.home-manager.nixosModules.default ]; }; - - homeConfigurations = { - "caperren@cap-slim7" = home-manager.lib.homeManagerConfiguration { - pkgs = nixpkgs.legacyPackages.x86_64-linux; - extraModules = [ - ./home/caperren/common.nix - ./home/caperren/laptop.nix - ]; - username = "caperren"; - homeDirectory = "/home/caperren"; - }; - - "caperren@cap-nr200p" = home-manager.lib.homeManagerConfiguration { - pkgs = nixpkgs.legacyPackages.x86_64-linux; - extraModules = [ - ./home/caperren/common.nix - ./home/caperren/desktop1.nix - ]; - username = "caperren"; - homeDirectory = "/home/caperren"; - }; - }; }; } diff --git a/hosts/cap-nr200p/configuration.nix b/hosts/cap-nr200p/configuration.nix index 1be80a6..3c8524d 100644 --- a/hosts/cap-nr200p/configuration.nix +++ b/hosts/cap-nr200p/configuration.nix @@ -22,6 +22,7 @@ ../../modules/system/desktop.nix ../../modules/system/fonts.nix ../../modules/system/gpu-nvidia.nix + ../../modules/system/home-manager-settings.nix ../../modules/system/hyprland.nix ../../modules/system/internationalization.nix ../../modules/system/networking.nix diff --git a/hosts/cap-slim7/configuration.nix b/hosts/cap-slim7/configuration.nix index 8ba226b..baebf46 100644 --- a/hosts/cap-slim7/configuration.nix +++ b/hosts/cap-slim7/configuration.nix @@ -17,6 +17,7 @@ ../../modules/system/displaylink.nix ../../modules/system/fonts.nix ../../modules/system/gpu-amd.nix + ../../modules/system/home-manager-settings.nix ../../modules/system/hyprland.nix ../../modules/system/internationalization.nix ../../modules/system/laptop.nix diff --git a/modules/system/home-manager-settings.nix b/modules/system/home-manager-settings.nix new file mode 100644 index 0000000..cdad9dc --- /dev/null +++ b/modules/system/home-manager-settings.nix @@ -0,0 +1,5 @@ +{ config, pkgs, ... }: +{ + home-manager.useGlobalPkgs = true; + home-manager.backupFileExtension = "bkp"; +} \ No newline at end of file diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix index fce03e8..7d3da2a 100644 --- a/users/caperren/caperren.nix +++ b/users/caperren/caperren.nix @@ -1,4 +1,7 @@ { config, pkgs, ... }: +let + kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}/config"; +in { users.users.caperren = { isNormalUser = true; @@ -11,8 +14,24 @@ "plugdev" "adbusers" ]; - packages = with pkgs; [ + }; + + home-manager.users.caperren = { + home.username = "caperren"; + home.homeDirectory = "/home/caperren"; + home.stateVersion = "25.05"; + + home.packages = with pkgs; [ obsidian ]; + + programs.git = { + enable = true; + userName = "Corwin Perren"; + userEmail = "caperren@gmail.com"; + }; + + home.file.".config/kanshi/config".source = kanshiConfigPath; + home.file.".config/wlogout/layout".source = ./dotfiles/wlogout/layout; }; } diff --git a/users/caperren/dotfiles/kanshi/cap-nr200p/config b/users/caperren/dotfiles/kanshi/cap-nr200p/config new file mode 100644 index 0000000..4fa9757 --- /dev/null +++ b/users/caperren/dotfiles/kanshi/cap-nr200p/config @@ -0,0 +1 @@ +# `hyprctl monitors list` for all outputs \ No newline at end of file diff --git a/users/caperren/dotfiles/kanshi/cap-slim7/config b/users/caperren/dotfiles/kanshi/cap-slim7/config new file mode 100644 index 0000000..6c78dec --- /dev/null +++ b/users/caperren/dotfiles/kanshi/cap-slim7/config @@ -0,0 +1,26 @@ +# `hyprctl monitors list` for all outputs + +profile builtin_only { + output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on +} + +profile bedroom_desk { + # Top left to right + output "Dell Inc. DELL P2411H F8NDP11G0DVU" enable position 0,1280 + output "Acer Technologies CB292CU 2217018D42410" enable position 1920,0 transform 90 + output "DLOGIC Ltd. No Monitor USB_601e-21H1" enable position 3000,1280 + # output "DLOGIC Ltd. No Monitor USB_601e-21H1" mode --custom 1920x1080@60Hz enable position 3000,1280 + + # Bottom left to right + output "Aculab Ltd Digital Unknown" enable transform 270 position 0,2360 + output "Hewlett Packard HP Z27n CNK7311DRR" enable position 1440,2560 + output "Aculab Ltd QHD270 Unknown" enable transform 90 position 4000,2360 + + # Far bottom right (laptop itself) + output "BOE 0x0A9B Unknown" enable position 5440,2360 adaptive_sync on +} + +profile scotts_apartment_tv { + output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on + output "Hisense Electric Co., Ltd. HISENSE 0x00000001" enable mode 1920x1080@60Hz position 2560,0 +} diff --git a/users/caperren/dotfiles/wlogout/layout b/users/caperren/dotfiles/wlogout/layout new file mode 100644 index 0000000..a0523d4 --- /dev/null +++ b/users/caperren/dotfiles/wlogout/layout @@ -0,0 +1,24 @@ +{ + "label" : "lock", + "action" : "hyprlock", + "text" : "Lock", + "keybind" : "l" +} +{ + "label" : "logout", + "action" : "loginctl terminate-user $USER", + "text" : "Logout", + "keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown", + "keybind" : "s" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot", + "keybind" : "r" +} \ No newline at end of file From 03cd45aac4de43826d4ebef90c9faeaa72b59bdd Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 00:16:31 -0700 Subject: [PATCH 2/7] Waybar configs and crestline account home manager template --- users/caperren/caperren.nix | 6 +- .../dotfiles/waybar/cap-nr200p/config | 122 ++++++++++++++ .../caperren/dotfiles/waybar/cap-slim7/config | 149 ++++++++++++++++++ users/crestline/crestline.nix | 9 +- 4 files changed, 281 insertions(+), 5 deletions(-) create mode 100644 users/caperren/dotfiles/waybar/cap-nr200p/config create mode 100644 users/caperren/dotfiles/waybar/cap-slim7/config diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix index 7d3da2a..9b615da 100644 --- a/users/caperren/caperren.nix +++ b/users/caperren/caperren.nix @@ -1,6 +1,7 @@ { config, pkgs, ... }: let - kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}/config"; + kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}"; + waybarConfigPath = ./. + "/dotfiles/waybar/${config.networking.hostName}"; in { users.users.caperren = { @@ -31,7 +32,8 @@ in userEmail = "caperren@gmail.com"; }; - home.file.".config/kanshi/config".source = kanshiConfigPath; + home.file.".config/kanshi/config".source = kanshiConfigPath + "/config"; + home.file.".config/waybar/config".source = waybarConfigPath + "/config"; home.file.".config/wlogout/layout".source = ./dotfiles/wlogout/layout; }; } diff --git a/users/caperren/dotfiles/waybar/cap-nr200p/config b/users/caperren/dotfiles/waybar/cap-nr200p/config new file mode 100644 index 0000000..5388a83 --- /dev/null +++ b/users/caperren/dotfiles/waybar/cap-nr200p/config @@ -0,0 +1,122 @@ +{ + "layer": "top", + "position": "top", + "modules-left": [ + "custom/logo", + "clock", + "disk", + "memory", + "cpu", + "hyprland/window" + ], + "modules-center": [ + "hyprland/workspaces" + ], + "modules-right": [ + "tray", + "idle_inhibitor", + "pulseaudio", + "custom/exit" + ], + "reload_style_on_change": true, + "custom/logo": { + "format": "", + "tooltip": false + }, + "hyprland/workspaces": { + "all-outputs": false, + "format": "{icon}", + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "󰈈", + "deactivated": "󰈉" + } + }, + "clock": { + "format": "{:%I:%M:%S %p | %a | %F}", + "interval": 1, + "tooltip-format": "\n{:%Y %B}\n{calendar}", + "calendar-weeks-pos": "right", + "today-format": "{}", + "format-calendar": "{}", + "format-calendar-weeks": "W{:%V}", + "format-calendar-weekdays": "{}" + }, + "disk": { + "interval": 30, + "format": " {percentage_used}%", + "path": "/" + }, + "cpu": { + "interval": 1, + "format": " {usage}%", + "min-length": 6, + "max-length": 6, + "format-icons": [ + "▁", + "▂", + "▃", + "▄", + "▅", + "▆", + "▇", + "█" + ] + }, + "memory": { + "format": " {percentage}%" + }, + "hyprland/window": { + "format": "( {class} )", + "rewrite": { + "(.*) - Mozilla Firefox": "🌎 $1", + "(.*) - zsh": "> [$1]" + } + }, + "pulseaudio": { + "format": "{volume:02}% {icon}", + "format-bluetooth": "󰂰", + "format-muted": "00% {icon}", + "format-icons": { + "headphones": "", + "bluetooth": "󰥰", + "handsfree": "", + "headset": "󱡬", + "phone": "", + "portable": "", + "car": "", + "default": [ + "🕨", + "🕩", + "🕪" + ] + }, + "justify": "center", + "on-click": "amixer sset Master toggle", + "on-click-right": "pavucontrol", + "tooltip-format": "{icon} {volume:02}%" + }, + "tray": { + "icon-size": 14, + "spacing": 10 + }, + "custom/exit": { + "format": "", + "on-click": "wlogout -b 2", + "tooltip": false + } +} + diff --git a/users/caperren/dotfiles/waybar/cap-slim7/config b/users/caperren/dotfiles/waybar/cap-slim7/config new file mode 100644 index 0000000..dedaf9c --- /dev/null +++ b/users/caperren/dotfiles/waybar/cap-slim7/config @@ -0,0 +1,149 @@ +{ + "layer": "top", + "position": "top", + "modules-left": [ + "custom/logo", + "clock", + "disk", + "memory", + "cpu", + "hyprland/window" + ], + "modules-center": [ + "hyprland/workspaces" + ], + "modules-right": [ + "tray", + "idle_inhibitor", + "pulseaudio", + "battery", + "backlight", + "custom/exit" + ], + "reload_style_on_change": true, + "custom/logo": { + "format": "", + "tooltip": false + }, + "hyprland/workspaces": { + "all-outputs": false, + "format": "{icon}", + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + }, + "backlight": { + "device": "intel_backlight", + "format": "{percent}% {icon}", + "format-icons": [ + "", + "" + ] + }, + "battery": { + "bat": "BAT0", + "interval": 60, + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-icons": [ + "", + "", + "", + "", + "" + ], + "max-length": 25 + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "󰈈", + "deactivated": "󰈉" + } + }, + "clock": { + "format": "{:%I:%M:%S %p | %a | %F}", + "interval": 1, + "tooltip-format": "\n{:%Y %B}\n{calendar}", + "calendar-weeks-pos": "right", + "today-format": "{}", + "format-calendar": "{}", + "format-calendar-weeks": "W{:%V}", + "format-calendar-weekdays": "{}" + }, + "disk": { + "interval": 30, + "format": " {percentage_used}%", + "path": "/" + }, + "cpu": { + "interval": 1, + "format": " {usage}%", + "min-length": 6, + "max-length": 6, + "format-icons": [ + "▁", + "▂", + "▃", + "▄", + "▅", + "▆", + "▇", + "█" + ] + }, + "memory": { + "format": " {percentage}%" + }, + "hyprland/window": { + "format": "( {class} )", + "rewrite": { + "(.*) - Mozilla Firefox": "🌎 $1", + "(.*) - zsh": "> [$1]" + } + }, + "pulseaudio": { + "format": "{volume:02}% {icon}", + "format-bluetooth": "󰂰", + "format-muted": "00% {icon}", + "format-icons": { + "headphones": "", + "bluetooth": "󰥰", + "handsfree": "", + "headset": "󱡬", + "phone": "", + "portable": "", + "car": "", + "default": [ + "🕨", + "🕩", + "🕪" + ] + }, + "justify": "center", + "on-click": "amixer sset Master toggle", + "on-click-right": "pavucontrol", + "tooltip-format": "{icon} {volume:02}%" + }, + "tray": { + "icon-size": 14, + "spacing": 10 + }, + "custom/exit": { + "format": "", + "on-click": "wlogout -b 2", + "tooltip": false + } +} + diff --git a/users/crestline/crestline.nix b/users/crestline/crestline.nix index bcbeb38..2389627 100644 --- a/users/crestline/crestline.nix +++ b/users/crestline/crestline.nix @@ -9,14 +9,17 @@ "input" "dialout" ]; - packages = with pkgs; [ ]; - }; services.displayManager.autoLogin = { enable = true; user = "crestline"; }; - services.xserver.displayManager.gdm.autoLogin.delay = 60; + + home-manager.users.crestline = { + home.username = "crestline"; + home.homeDirectory = "/home/crestline"; + home.stateVersion = "25.05"; + }; } From 69522943d7b70f8a68058ba071c841f6132010b8 Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 00:34:00 -0700 Subject: [PATCH 3/7] spotify-player dotfile, snuck in stress application for s-tui stress testing --- .../application-groups/system-utilities.nix | 45 ++++++++--------- users/caperren/caperren.nix | 3 ++ .../caperren/dotfiles/spotify-player/app.toml | 49 +++++++++++++++++++ 3 files changed, 75 insertions(+), 22 deletions(-) create mode 100644 users/caperren/dotfiles/spotify-player/app.toml diff --git a/modules/application-groups/system-utilities.nix b/modules/application-groups/system-utilities.nix index 502241e..7187f6f 100644 --- a/modules/application-groups/system-utilities.nix +++ b/modules/application-groups/system-utilities.nix @@ -20,38 +20,39 @@ services.hardware.openrgb.enable = true; environment.systemPackages = with pkgs; [ - kitty - lf + desktop-file-utils + dnsutils + ffmpeg-full git + gparted htop iftop - iotop - util-linux - usbutils - dnsutils - unzip - killall - wget - jq - speedcrunch - gparted - ffmpeg-full - xfce.mousepad imagemagick - nvtopPackages.full + iotop + jq + killall + kitty + lf ncdu - s-tui + networkmanager + networkmanagerapplet nmap + nvtopPackages.full + openrgb-with-all-plugins pciutils - desktop-file-utils + rofi-bluetooth rpi-imager rpiboot - streamdeck-ui + s-tui scrcpy - openrgb-with-all-plugins - networkmanagerapplet - rofi-bluetooth - networkmanager + speedcrunch + streamdeck-ui + stress + unzip + usbutils + util-linux + wget + xfce.mousepad ]; } diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix index 9b615da..5574a84 100644 --- a/users/caperren/caperren.nix +++ b/users/caperren/caperren.nix @@ -1,6 +1,8 @@ { config, pkgs, ... }: let kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}"; + spotifyPlayerAppTomlTextTemplate = builtins.readFile ./dotfiles/spotify-player/app.toml; + spotifyPlayerAppTomlText = builtins.replaceStrings [ "{{hostname}}" ] [ config.networking.hostName ] spotifyPlayerAppTomlTextTemplate; waybarConfigPath = ./. + "/dotfiles/waybar/${config.networking.hostName}"; in { @@ -33,6 +35,7 @@ in }; home.file.".config/kanshi/config".source = kanshiConfigPath + "/config"; + home.file.".config/spotify-player/app.toml".text = spotifyPlayerAppTomlText; home.file.".config/waybar/config".source = waybarConfigPath + "/config"; home.file.".config/wlogout/layout".source = ./dotfiles/wlogout/layout; }; diff --git a/users/caperren/dotfiles/spotify-player/app.toml b/users/caperren/dotfiles/spotify-player/app.toml new file mode 100644 index 0000000..ad2022b --- /dev/null +++ b/users/caperren/dotfiles/spotify-player/app.toml @@ -0,0 +1,49 @@ +theme = "dracula" +client_id = "65b708073fc0480ea92a077233ca87bd" +client_port = 8080 +login_redirect_uri = "http://127.0.0.1:8989/login" +playback_format = """ +{status} {track} • {artists} +{album} +{metadata}""" +notify_timeout_in_secs = 0 +tracks_playback_limit = 1000 +app_refresh_duration_in_ms = 32 +playback_refresh_duration_in_ms = 0 +page_size_in_rows = 20 +play_icon = "▶" +pause_icon = "▌▌" +liked_icon = "♥" +border_type = "Plain" +progress_bar_type = "Rectangle" +cover_img_length = 9 +cover_img_width = 5 +cover_img_scale = 1.0 +enable_media_control = true +enable_streaming = "Always" +enable_notify = true +enable_cover_image_cache = true +default_device = "{{hostname}}" +notify_streaming_only = false +seek_duration_secs = 5 + +[notify_format] +summary = "{track} • {artists}" +body = "{album}" + +[layout] +playback_window_position = "Top" +playback_window_height = 6 + +[layout.library] +playlist_percent = 40 +album_percent = 40 + +[device] +name = "{{hostname}}" +device_type = "speaker" +volume = 100 +bitrate = 320 +audio_cache = false +normalization = false +autoplay = false From 6216d108a98d9205996b2a58ede4680071087f0e Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 01:40:33 -0700 Subject: [PATCH 4/7] Kanshi config for cap-nr200p --- users/caperren/dotfiles/kanshi/cap-nr200p/config | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/users/caperren/dotfiles/kanshi/cap-nr200p/config b/users/caperren/dotfiles/kanshi/cap-nr200p/config index 4fa9757..a75b80d 100644 --- a/users/caperren/dotfiles/kanshi/cap-nr200p/config +++ b/users/caperren/dotfiles/kanshi/cap-nr200p/config @@ -1 +1,7 @@ -# `hyprctl monitors list` for all outputs \ No newline at end of file +# `hyprctl monitors list` for all outputs + +profile office_desk { + output "Hewlett Packard HP Z27n CNK7311FCY" enable position 0,0 + output "LG Electronics LG ULTRAGEAR 104NTVS1N751" enable mode 3440x1440@143.92Hz position -440,1440 adaptive_sync on + output "BOE Display 0x00000060" enable position 950,2880 scale 1.0 +} \ No newline at end of file From 366d2381413c63a76f2205f80ecad5619cbf76e2 Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 02:20:40 -0700 Subject: [PATCH 5/7] Added unused ai application group, btop, better hyprtop and hypridle, automatic nix garbage collection, and un-deduplicated hyprland configs --- README.md | 4 + modules/application-groups/ai.nix | 39 +++ .../application-groups/system-utilities.nix | 1 + modules/system/hyprland.nix | 5 +- modules/system/nix-settings.nix | 8 + users/caperren/caperren.nix | 2 + .../hyprland/cap-nr200p/hyprland.conf | 232 +++++++++++++++++ .../dotfiles/hyprland/cap-slim7/hyprland.conf | 244 ++++++++++++++++++ 8 files changed, 533 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 modules/application-groups/ai.nix create mode 100644 users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf create mode 100644 users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e29aa5 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# nixos-configs + +## Misc references used +* https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles/tree/main \ No newline at end of file diff --git a/modules/application-groups/ai.nix b/modules/application-groups/ai.nix new file mode 100644 index 0000000..db7f264 --- /dev/null +++ b/modules/application-groups/ai.nix @@ -0,0 +1,39 @@ +{ pkgs, config, ... }: + +{ + services.ollama = { + enable = true; + loadModels = [ + "llama3.2:3b" + "phi4-reasoning:14b" + "dolphin3:8b" + "smallthinker:3b" + "gemma3:4b" + "gemma3:12b" + "gemma3:27b" + "deepcoder:14b" + "qwen3:14b" + "nomic-embed-text" + ]; + acceleration = "cuda"; + }; + + services.open-webui = { + enable = true; + port = 8888; + host = "127.0.0.1"; + }; + + environment.systemPackages = with pkgs; [ + oterm + alpaca + aichat + fabric-ai + aider-chat + + # tgpt + # smartcat + # nextjs-ollama-llm-ui + # open-webui + ]; +} diff --git a/modules/application-groups/system-utilities.nix b/modules/application-groups/system-utilities.nix index 7187f6f..494f6b9 100644 --- a/modules/application-groups/system-utilities.nix +++ b/modules/application-groups/system-utilities.nix @@ -20,6 +20,7 @@ services.hardware.openrgb.enable = true; environment.systemPackages = with pkgs; [ + btop desktop-file-utils dnsutils ffmpeg-full diff --git a/modules/system/hyprland.nix b/modules/system/hyprland.nix index 0ac6f2b..dce8d73 100644 --- a/modules/system/hyprland.nix +++ b/modules/system/hyprland.nix @@ -22,6 +22,9 @@ xdg.portal.enable = true; xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + programs.hyprlock.enable = true; + services.hypridle.enable = true; + environment.systemPackages = with pkgs; [ waybar dunst @@ -39,8 +42,6 @@ swayimg hyprpicker kanshi - hyprlock - swayidle mako (pkgs.waybar.overrideAttrs (oldAttrs: { diff --git a/modules/system/nix-settings.nix b/modules/system/nix-settings.nix index e327172..50d1235 100644 --- a/modules/system/nix-settings.nix +++ b/modules/system/nix-settings.nix @@ -12,6 +12,14 @@ # Generally want a larger download buffer nix.settings.download-buffer-size = 524288000; + nix.settings.auto-optimise-store = true; + nix.optimise.automatic = true; + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 14d"; + }; + programs.bash.shellAliases = { nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix index 5574a84..ae38c48 100644 --- a/users/caperren/caperren.nix +++ b/users/caperren/caperren.nix @@ -1,5 +1,6 @@ { config, pkgs, ... }: let + hyprlandConfigPath = ./. + "/dotfiles/hyprland/${config.networking.hostName}"; kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}"; spotifyPlayerAppTomlTextTemplate = builtins.readFile ./dotfiles/spotify-player/app.toml; spotifyPlayerAppTomlText = builtins.replaceStrings [ "{{hostname}}" ] [ config.networking.hostName ] spotifyPlayerAppTomlTextTemplate; @@ -34,6 +35,7 @@ in userEmail = "caperren@gmail.com"; }; + home.file.".config/hypr/hyprland.conf".source = hyprlandConfigPath + "/hyprland.conf"; home.file.".config/kanshi/config".source = kanshiConfigPath + "/config"; home.file.".config/spotify-player/app.toml".text = spotifyPlayerAppTomlText; home.file.".config/waybar/config".source = waybarConfigPath + "/config"; diff --git a/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf b/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf new file mode 100644 index 0000000..a32f4a8 --- /dev/null +++ b/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf @@ -0,0 +1,232 @@ +# ####################################################################################### +# 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. +# ####################################################################################### + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# autogenerated = 1 # remove this line to remove the warning + +# See https://wiki.hyprland.org/Configuring/Monitors/ +#monitor=HDMA-A-1,2560x1440@60, +#monitor=DP-3,2560x1440@60,0x-1440,1 +monitor=DP-2,3440x1440@144,auto,1,vrr,1 +#monitor=HDMI-A-1,2160x1440@60,640x1440,1 +#monitor=Unknown-2,2160x1440@60,950x1440,1 +#monitor=,preferred,auto,1 +#exec-once = xrandr --output DP-2 --primary + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Set programs that you use +$terminal = kitty +$fileManager = thunar +$menu = wofi --show drun + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. + numlock_by_default = 1 +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 5 + border_size = 2 + col.active_border = rgba(0D8A1EFF) + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = true +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + + } + + #drop_shadow = yes + #shadow_range = 4 + #shadow_render_power = 3 +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +#master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +# new_is_master = true +#} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers +} + +# 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 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, T, exec, $terminal +bind = $mainMod, C, killactive, + +# Launch terminal +bind = SHIFT_SUPER, Return, exec, $terminal + +# Close active window +bind = $mainMod, Shift+q, 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 + +bind = $mainMod, F, fullscreen + +# 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 + +# Volume Keys +bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+ +bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%- +bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + +# Media Controls +bindl=, XF86AudioPlay, exec, playerctl play-pause +bindl=, XF86AudioPrev, exec, playerctl previous +bindl=, XF86AudioNext, exec, playerctl next + +# Brightness Controls +bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%- +bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1% + +exec-once = sleep 3 && waybar + +exec-once = sleep 5 && nm-applet +exec-once = sleep 5 && blueman-applet +exec-once = sleep 10 && steam -silent +exec-once = ydotoold & +exec-once = sleep 5 && streamdeck -n +exec-once = kanshi & +exec-once = sleep 5 & telegram-desktop -startintray +; exec-once = swayidle -w timeout 600 "hyprlock" before-sleep "hyprlock" & diff --git a/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf b/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf new file mode 100644 index 0000000..bd7cbe2 --- /dev/null +++ b/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf @@ -0,0 +1,244 @@ +# ####################################################################################### +# 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. +# ####################################################################################### + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# autogenerated = 1 # remove this line to remove the warning + +# See https://wiki.hyprland.org/Configuring/Monitors/ +#monitor=HDMA-A-1,2560x1440@60, +#monitor=DP-3,2560x1440@60,0x-1440,1 +#monitor=DP-2,3440x1440@144,0x0,1 +# ,vrr,1 +#monitor=HDMI-A-1,2160x1440@60,640x1440,1 +#monitor=HDMI-A-1,3840x2160@60,-3840x0,1 +#monitor=Unknown-2,2160x1440@60,950x1440,1 +monitor=,preferred,auto,1 +# monitor=DP-1,preferred,auto-down,1,transform, 1 +monitor=DP-2,preferred,auto-down,1 +#exec-once = xrandr --output DP-2 --primary + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Set programs that you use +$terminal = kitty +$fileManager = dolphin +$menu = wofi --show drun + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. + numlock_by_default = 1 +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 5 + border_size = 2 + col.active_border = rgba(0D8A1EFF) + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = true +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + + } + + #drop_shadow = yes + #shadow_range = 4 + #shadow_render_power = 3 +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +#master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +# new_is_master = true +#} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers +} + +# 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 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, T, exec, $terminal +bind = $mainMod, C, killactive, + +# Launch terminal +bind = SHIFT_SUPER, Return, exec, $terminal + +# Close active window +bind = $mainMod, Shift+q, 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 + +bind = $mainMod, F, fullscreen + +# 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 + +# Volume Keys +bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+ +bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%- +bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + +# Media Controls +bindl=, XF86AudioPlay, exec, playerctl play-pause +bindl=, XF86AudioPrev, exec, playerctl previous +bindl=, XF86AudioNext, exec, playerctl next + +# Brightness Controls +bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%- +bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1% + +exec-once = sleep 3 && waybar + +exec-once = sleep 5 && nm-applet +exec-once = sleep 5 && blueman-applet +exec-once = ydotoold & +exec-once = sleep 5 && streamdeck -n +exec-once = kanshi & +exec-once = sleep 5 & telegram-desktop -startintray + +# moves the window to x0, y0 on the screen +windowrulev2=move 0 0,class:(flameshot),title:(flameshot) +# shows the window on all workspaces +windowrulev2=pin,class:(flameshot),title:(flameshot) +# tell the application it's in fullscreen mode +windowrulev2=fullscreenstate,class:(flameshot),title:(flameshot) +# force the window to be floating ( not in a tiled pane ) +windowrulev2=float,class:(flameshot),title:(flameshot) From dd2068166abfaa26076b0046a0c2f85a65cad2e0 Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 02:25:43 -0700 Subject: [PATCH 6/7] Shorter aliases for nix-specific bash commands --- modules/system/nix-settings.nix | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/system/nix-settings.nix b/modules/system/nix-settings.nix index 50d1235..707b170 100644 --- a/modules/system/nix-settings.nix +++ b/modules/system/nix-settings.nix @@ -21,10 +21,14 @@ }; programs.bash.shellAliases = { - nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; - nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; - nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix"; + # Nix rebuild, switch + nrs = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; - nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; + # Nix flake update, rebuild, switch + nus = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; + + # Special cleanup, needed when efi partition runs out of space. Deletes all but the last five generations. + # Remember to make that partition bigger in the future... + neficlean = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; }; } From 78a9be43cbb0b38d63cdb53942639f4dc4669ff9 Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Tue, 1 Jul 2025 02:53:48 -0700 Subject: [PATCH 7/7] Minimal hyprland config de-duplication --- users/caperren/caperren.nix | 1 + .../hyprland/cap-nr200p/hyprland.conf | 231 +--------------- .../dotfiles/hyprland/cap-slim7/hyprland.conf | 247 +----------------- .../dotfiles/hyprland/hyprland-common.conf | 173 ++++++++++++ 4 files changed, 182 insertions(+), 470 deletions(-) create mode 100644 users/caperren/dotfiles/hyprland/hyprland-common.conf diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix index ae38c48..b60935f 100644 --- a/users/caperren/caperren.nix +++ b/users/caperren/caperren.nix @@ -35,6 +35,7 @@ in userEmail = "caperren@gmail.com"; }; + home.file.".config/hypr/hyprland-common.conf".source = ./dotfiles/hyprland/hyprland-common.conf; home.file.".config/hypr/hyprland.conf".source = hyprlandConfigPath + "/hyprland.conf"; home.file.".config/kanshi/config".source = kanshiConfigPath + "/config"; home.file.".config/spotify-player/app.toml".text = spotifyPlayerAppTomlText; diff --git a/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf b/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf index a32f4a8..a1c4510 100644 --- a/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf +++ b/users/caperren/dotfiles/hyprland/cap-nr200p/hyprland.conf @@ -1,232 +1,9 @@ -# ####################################################################################### -# 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. -# ####################################################################################### - -# -# Please note not all available settings / options are set here. -# For a full list, see the wiki -# - -# autogenerated = 1 # remove this line to remove the warning - -# See https://wiki.hyprland.org/Configuring/Monitors/ -#monitor=HDMA-A-1,2560x1440@60, -#monitor=DP-3,2560x1440@60,0x-1440,1 +# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate monitor=DP-2,3440x1440@144,auto,1,vrr,1 -#monitor=HDMI-A-1,2160x1440@60,640x1440,1 -#monitor=Unknown-2,2160x1440@60,950x1440,1 -#monitor=,preferred,auto,1 -#exec-once = xrandr --output DP-2 --primary -# See https://wiki.hyprland.org/Configuring/Keywords/ for more +# Source configs +source = ~/.config/hypr/hyprland-common.conf -# Source a file (multi-file configs) -# source = ~/.config/hypr/myColors.conf - -# Set programs that you use -$terminal = kitty -$fileManager = thunar -$menu = wofi --show drun - -# Some default env vars. -env = XCURSOR_SIZE,24 -env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that - -# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - follow_mouse = 1 - - touchpad { - natural_scroll = no - } - - sensitivity = 0 # -1.0 to 1.0, 0 means no modification. - numlock_by_default = 1 -} - -general { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - gaps_in = 5 - gaps_out = 5 - border_size = 2 - col.active_border = rgba(0D8A1EFF) - col.inactive_border = rgba(595959aa) - - layout = dwindle - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = true -} - -decoration { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - rounding = 10 - - blur { - enabled = true - size = 3 - passes = 1 - } - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - - } - - #drop_shadow = yes - #shadow_range = 4 - #shadow_render_power = 3 -} - -animations { - enabled = yes - - # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default -} - -dwindle { - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = yes # you probably want this -} - -#master { - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -# new_is_master = true -#} - -gestures { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - workspace_swipe = off -} - -misc { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers -} - -# 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 -} - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. - - -# See https://wiki.hyprland.org/Configuring/Keywords/ for more -$mainMod = SUPER - -# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more -bind = $mainMod, T, exec, $terminal -bind = $mainMod, C, killactive, - -# Launch terminal -bind = SHIFT_SUPER, Return, exec, $terminal - -# Close active window -bind = $mainMod, Shift+q, 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 - -bind = $mainMod, F, fullscreen - -# 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 - -# Volume Keys -bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+ -bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%- -bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - -# Media Controls -bindl=, XF86AudioPlay, exec, playerctl play-pause -bindl=, XF86AudioPrev, exec, playerctl previous -bindl=, XF86AudioNext, exec, playerctl next - -# Brightness Controls -bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%- -bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1% - -exec-once = sleep 3 && waybar - -exec-once = sleep 5 && nm-applet -exec-once = sleep 5 && blueman-applet +# Application launch exec-once = sleep 10 && steam -silent -exec-once = ydotoold & -exec-once = sleep 5 && streamdeck -n -exec-once = kanshi & -exec-once = sleep 5 & telegram-desktop -startintray ; exec-once = swayidle -w timeout 600 "hyprlock" before-sleep "hyprlock" & diff --git a/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf b/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf index bd7cbe2..567014c 100644 --- a/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf +++ b/users/caperren/dotfiles/hyprland/cap-slim7/hyprland.conf @@ -1,244 +1,5 @@ -# ####################################################################################### -# 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. -# ####################################################################################### +# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate +monitor=eDP-2,2560x1600@165,auto,1,vrr,1 -# -# Please note not all available settings / options are set here. -# For a full list, see the wiki -# - -# autogenerated = 1 # remove this line to remove the warning - -# See https://wiki.hyprland.org/Configuring/Monitors/ -#monitor=HDMA-A-1,2560x1440@60, -#monitor=DP-3,2560x1440@60,0x-1440,1 -#monitor=DP-2,3440x1440@144,0x0,1 -# ,vrr,1 -#monitor=HDMI-A-1,2160x1440@60,640x1440,1 -#monitor=HDMI-A-1,3840x2160@60,-3840x0,1 -#monitor=Unknown-2,2160x1440@60,950x1440,1 -monitor=,preferred,auto,1 -# monitor=DP-1,preferred,auto-down,1,transform, 1 -monitor=DP-2,preferred,auto-down,1 -#exec-once = xrandr --output DP-2 --primary - -# See https://wiki.hyprland.org/Configuring/Keywords/ for more - - -# Source a file (multi-file configs) -# source = ~/.config/hypr/myColors.conf - -# Set programs that you use -$terminal = kitty -$fileManager = dolphin -$menu = wofi --show drun - -# Some default env vars. -env = XCURSOR_SIZE,24 -env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that - -# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - follow_mouse = 1 - - touchpad { - natural_scroll = no - } - - sensitivity = 0 # -1.0 to 1.0, 0 means no modification. - numlock_by_default = 1 -} - -general { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - gaps_in = 5 - gaps_out = 5 - border_size = 2 - col.active_border = rgba(0D8A1EFF) - col.inactive_border = rgba(595959aa) - - layout = dwindle - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = true -} - -decoration { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - rounding = 10 - - blur { - enabled = true - size = 3 - passes = 1 - } - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - - } - - #drop_shadow = yes - #shadow_range = 4 - #shadow_render_power = 3 -} - -animations { - enabled = yes - - # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default -} - -dwindle { - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = yes # you probably want this -} - -#master { - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -# new_is_master = true -#} - -gestures { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - workspace_swipe = off -} - -misc { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers -} - -# 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 -} - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. - - -# See https://wiki.hyprland.org/Configuring/Keywords/ for more -$mainMod = SUPER - -# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more -bind = $mainMod, T, exec, $terminal -bind = $mainMod, C, killactive, - -# Launch terminal -bind = SHIFT_SUPER, Return, exec, $terminal - -# Close active window -bind = $mainMod, Shift+q, 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 - -bind = $mainMod, F, fullscreen - -# 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 - -# Volume Keys -bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+ -bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%- -bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - -# Media Controls -bindl=, XF86AudioPlay, exec, playerctl play-pause -bindl=, XF86AudioPrev, exec, playerctl previous -bindl=, XF86AudioNext, exec, playerctl next - -# Brightness Controls -bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%- -bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1% - -exec-once = sleep 3 && waybar - -exec-once = sleep 5 && nm-applet -exec-once = sleep 5 && blueman-applet -exec-once = ydotoold & -exec-once = sleep 5 && streamdeck -n -exec-once = kanshi & -exec-once = sleep 5 & telegram-desktop -startintray - -# moves the window to x0, y0 on the screen -windowrulev2=move 0 0,class:(flameshot),title:(flameshot) -# shows the window on all workspaces -windowrulev2=pin,class:(flameshot),title:(flameshot) -# tell the application it's in fullscreen mode -windowrulev2=fullscreenstate,class:(flameshot),title:(flameshot) -# force the window to be floating ( not in a tiled pane ) -windowrulev2=float,class:(flameshot),title:(flameshot) +# Source configs +source = ~/.config/hypr/hyprland-common.conf \ No newline at end of file diff --git a/users/caperren/dotfiles/hyprland/hyprland-common.conf b/users/caperren/dotfiles/hyprland/hyprland-common.conf new file mode 100644 index 0000000..f315bc1 --- /dev/null +++ b/users/caperren/dotfiles/hyprland/hyprland-common.conf @@ -0,0 +1,173 @@ +# Always enable new monitors in automatic mode +monitor=,preferred,auto,1 + +# Set programs that you use +$terminal = kitty +$fileManager = thunar +$menu = wofi --show drun + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. + numlock_by_default = 1 +} + +general { + gaps_in = 5 + gaps_out = 5 + border_size = 2 + col.active_border = rgba(0D8A1EFF) + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } +} + +animations { + enabled = yes + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +gestures { + workspace_swipe = off +} + +misc { + force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers +} + +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + +$mainMod = SUPER + +bind = $mainMod, T, exec, $terminal +bind = $mainMod, C, killactive, + +# Launch terminal +bind = SHIFT_SUPER, Return, exec, $terminal + +# Close active window +bind = $mainMod, Shift+q, 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 + +bind = $mainMod, F, fullscreen + +# 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 + +# Volume Keys +bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+ +bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%- +bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + +# Media Controls +bindl=, XF86AudioPlay, exec, playerctl play-pause +bindl=, XF86AudioPrev, exec, playerctl previous +bindl=, XF86AudioNext, exec, playerctl next + +# Brightness Controls +bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%- +bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1% + +# Application launch +exec-once = kanshi & +exec-once = ydotoold & + +exec-once = sleep 3 && waybar + +exec-once = sleep 5 && nm-applet +exec-once = sleep 5 && blueman-applet +exec-once = sleep 5 && streamdeck -n +exec-once = sleep 5 & telegram-desktop -startintray \ No newline at end of file