refactor(flake-parts): initial flake-parts configuration
This commit is contained in:
		
							parent
							
								
									8f67be9e68
								
							
						
					
					
						commit
						5603001d65
					
				
					 230 changed files with 380 additions and 717 deletions
				
			
		|  | @ -0,0 +1,14 @@ | |||
| { lib, ... }: | ||||
| 
 | ||||
| { | ||||
|   imports = [ | ||||
|     ./hyprland | ||||
|   ]; | ||||
| 
 | ||||
|   options.homeModules.desktop.wayland.windowManager = {  | ||||
|     hyprland = { | ||||
|       enable = lib.mkEnableOption "Enable Hyprland window-manager"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,38 @@ | |||
| { lib, config, pkgs, inputs, ... }:  | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
|   inherit (import ./pkgs {inherit pkgs;}) hyprbrightness hyprvolume; | ||||
|   inherit (inputs.ooks-scripts.packages.${pkgs.system}) powermenu zellijmenu; | ||||
| in | ||||
| { | ||||
|   imports = [ | ||||
|     inputs.hyprland.homeManagerModules.default | ||||
|     ./settings | ||||
|     ./extras | ||||
|   ]; | ||||
| 
 | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     xdg.portal = { | ||||
|       extraPortals = [ inputs.xdg-portal-hyprland.packages.${pkgs.system}.default ]; | ||||
|     }; | ||||
| 
 | ||||
|     home.packages = [ | ||||
|       pkgs.hyprpicker | ||||
|       hyprvolume | ||||
|       hyprbrightness | ||||
| 
 | ||||
|       # Personal scripts | ||||
|       powermenu | ||||
|       zellijmenu #TODO: only add if zellij enabled | ||||
|       ]; | ||||
|      | ||||
|     wayland.windowManager.hyprland = { | ||||
|       enable = true; | ||||
|       xwayland.enable = true; | ||||
|       systemd = { | ||||
|         enable = true; | ||||
|         variables = ["--all"]; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,17 @@ | |||
| { lib, ... }: | ||||
| 
 | ||||
| { | ||||
|   imports = [ | ||||
|     ./hyprcapture | ||||
|     ./hyprshade | ||||
|   ]; | ||||
| 
 | ||||
|   options.homeModules.desktop.wayland.windowManager.hyprland.extras = { | ||||
|     hyprcapture = { | ||||
|       enable = lib.mkEnableOption "Enable hyprcapture screenshot/recording module"; | ||||
|     }; | ||||
|     hyprshade = { | ||||
|       enable = lib.mkEnableOption "Enable hyprshade tool module"; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,33 @@ | |||
| { lib, config, pkgs, inputs, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland.extras.hyprcapture; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
| 
 | ||||
|     home.packages = with inputs; [ | ||||
|     # Screenshot tool | ||||
|       hyprland-contrib.packages.${pkgs.system}.grimblast | ||||
|     # Screen recording tool | ||||
|       ooks-scripts.packages.${pkgs.system}.hyprrecord | ||||
|     ]; | ||||
| 
 | ||||
|     # Add XDG user directories that the scripts use | ||||
|     xdg.userDirs.extraConfig = { | ||||
|       XDG_RECORDINGS_DIR = "${config.xdg.userDirs.videos}/Recordings"; | ||||
|       XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; | ||||
|     }; | ||||
| 
 | ||||
|     wayland.windowManager.hyprland.settings.bind = [ | ||||
|       # Screenshot binds | ||||
|       ",               Print,         exec,     grimblast --notify --cursor copysave area" | ||||
|       "SUPER,          Print,         exec,     grimblast --notify --cursor copysave screen" | ||||
|       # Recording binds | ||||
|       "SUPER,          r,             exec,     hyprrecord -a -w video screen copysave" | ||||
|       "SUPER CTRL,     r,             exec,     hyprrecord -a -w video area copysave" | ||||
|       "SUPER ALT,      r,             exec,     hyprrecord -w gif area copysave" | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,12 @@ | |||
| { lib, config, pkgs, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland.extras.hyprshade; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     home.packages = [ pkgs.hyprshade ]; | ||||
|     # TODO: implement hyprshade configuration | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,9 @@ | |||
| { pkgs, ... }: | ||||
| 
 | ||||
| let | ||||
|   packages = { | ||||
|     hyprvolume = pkgs.callPackage ./hyprvolume.nix {}; | ||||
|     hyprbrightness = pkgs.callPackage ./hyprbrightness.nix {}; | ||||
|   }; | ||||
| in | ||||
|   packages | ||||
|  | @ -0,0 +1,20 @@ | |||
| { pkgs, ... }: | ||||
| 
 | ||||
| pkgs.writeShellApplication { | ||||
|   name = "hyprbrightness"; | ||||
|   runtimeInputs = with pkgs; [brillo libnotify]; | ||||
|   text = '' | ||||
|     if [ "$1" == "up" ]; then | ||||
|       brillo -q -u 30000 -A 5 | ||||
|     elif [ "$1" == "down" ]; then | ||||
|       brillo -q -u 30000 -U 5 | ||||
|     else | ||||
|       echo "Invalid argument" | ||||
|       exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     BRIGHTNESS=$(brillo -G | awk -F'.' '{print$1}') | ||||
| 
 | ||||
|     notify-send --app-name="system-notify" -h string:x-canonical-private-synchronous:sys-notify "  $BRIGHTNESS%" | ||||
|   ''; | ||||
| } | ||||
|  | @ -0,0 +1,19 @@ | |||
| { pkgs, ... }: | ||||
| 
 | ||||
| pkgs.writeShellApplication { | ||||
|   name = "hyprvolume"; | ||||
|   runtimeInputs = with pkgs; [pamixer libnotify]; | ||||
|   text = '' | ||||
|     if [ "$1" == "up" ]; then | ||||
|       pamixer --increase 5 | ||||
|     elif [ "$1" == "down" ]; then | ||||
|       pamixer --decrease 5 | ||||
|     elif [ "$1" == "mute" ]; then | ||||
|       pamixer --toggle-mute | ||||
|     fi | ||||
| 
 | ||||
|     VOLUME=$(pamixer --get-volume-human) | ||||
| 
 | ||||
|     notify-send --app-name="system-notify" -h string:x-canonical-private-synchronous:sys-notify " $VOLUME" | ||||
|   ''; | ||||
| } | ||||
|  | @ -0,0 +1,52 @@ | |||
| { config, lib, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
|   pointer = config.home.pointerCursor; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland = { | ||||
|       settings = { | ||||
|         general = { | ||||
| 
 | ||||
|           gaps_in = 10; | ||||
|           gaps_out = 10; | ||||
|           border_size = 2; | ||||
|           cursor_inactive_timeout = 4; | ||||
|           "col.active_border" = "0xff${config.colorscheme.colors.base05}"; | ||||
|           "col.inactive_border" = "0xff${config.colorscheme.colors.base02}"; | ||||
|           }; | ||||
| 
 | ||||
|         exec-once = [ | ||||
|           "hyprctl setcursor ${pointer.name} ${toString pointer.size}" | ||||
|         ]; | ||||
| 
 | ||||
|         decoration = { | ||||
| 
 | ||||
|           active_opacity = 1.0; | ||||
|           inactive_opacity = 1.0; | ||||
|           fullscreen_opacity = 1.0; | ||||
| 
 | ||||
|           rounding = 0; | ||||
| 
 | ||||
|           blur = { | ||||
|             enabled = false; | ||||
|             ignore_opacity = true; | ||||
|           }; | ||||
| 
 | ||||
|           drop_shadow = true; | ||||
|           shadow_range = 12; | ||||
|           shadow_offset = "3 3"; | ||||
|           "col.shadow" = "0x44000000"; | ||||
|           "col.shadow_inactive" = "0x66000000"; | ||||
|         }; | ||||
|      | ||||
|         animations = { | ||||
|           enabled = false; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,128 @@ | |||
| { lib, config, pkgs, ... }:  | ||||
| 
 | ||||
| let | ||||
|     cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   wayland.windowManager.hyprland.settings = lib.mkIf cfg.enable { | ||||
|     bind = let | ||||
|       terminal = config.home.sessionVariables.TERMINAL; | ||||
|       browser = config.home.sessionVariables.BROWSER; | ||||
|       editor = config.home.sessionVariables.EDITOR; | ||||
|       locker = config.home.sessionVariables.LOCKER; | ||||
| 
 | ||||
|       spotifyctl = "${pkgs.spotify-player}/bin/spotify_player"; | ||||
|       discord = "${pkgs.vesktop}/bin/vesktop"; | ||||
|        | ||||
|       explorer = "${pkgs.cinnamon.nemo-with-extensions}/bin/nemo"; | ||||
| 
 | ||||
|       password = "${pkgs._1password-gui}/bin/1password"; | ||||
|     in [ | ||||
| 
 | ||||
|       # Program Launch | ||||
|       "SUPER,          b,             exec,     ${browser}" | ||||
|       "SUPER,          return,        exec,     ${terminal}" | ||||
|       "SUPER,          e,             exec,     ${terminal} ${editor}" | ||||
|       "SUPERSHIFT,     P,             exec,     ${password}" | ||||
|       "SUPER,          d,             exec,     ${discord}" | ||||
|       "SUPERSHIFT,     e,             exec,     ${explorer}" | ||||
|       "SUPERSHIFT,     S,             exec,     steam" | ||||
|       "SUPER,          escape,        exec,     ${terminal} --title=BTOP btop" | ||||
|       "SUPER CTRL,     return,        exec,     zellijmenu -n" | ||||
| 
 | ||||
|       "SUPER,          delete,        exec,     powermenu -c dmenu" | ||||
|        | ||||
|        | ||||
| 
 | ||||
|       # Spotify PLayer Controls | ||||
| 
 | ||||
|       "SUPER,          bracketright,  exec,     ${spotifyctl} playback next" | ||||
|       "SUPER,          bracketleft,   exec,     ${spotifyctl} playback previous" | ||||
|       "SUPER,          backslash,     exec,     ${spotifyctl} playback play-pause" | ||||
| 
 | ||||
|       # Brightness | ||||
| 
 | ||||
|       ",XF86MonBrightnessUp,          exec,     hyprbrightness up" | ||||
|       ",XF86MonBrightnessDown,        exec,     hyprbrightness down" | ||||
| 
 | ||||
|       # Volume | ||||
| 
 | ||||
|       ",XF86AudioRaiseVolume,         exec,     hyprvolume up" | ||||
|       ",XF86AudioLowerVolume,         exec,     hyprvolume down" | ||||
|       ",XF86AudioMute,                exec,     hyprvolume mute" | ||||
|        | ||||
|       # Window Management | ||||
|        | ||||
|       "SUPER,          Q,             killactive" | ||||
|       "SUPER CTRL,     backspace,     killactive" | ||||
|       "SUPERSHIFT ALT, delete,        exec, hyprkillsession" | ||||
|       "SUPER,          F,             fullscreen" | ||||
|       "SUPER CTRL,     F,             fakefullscreen" | ||||
|       "SUPER,          Space,         togglefloating" | ||||
|       "SUPER,          P,             pseudo" # dwindle | ||||
|       "SUPER,          S,             togglesplit" # dwindle | ||||
| 
 | ||||
|       # Focus | ||||
| 
 | ||||
|       "SUPER,          left,          movefocus,l" | ||||
|       "SUPER,          right,         movefocus,r" | ||||
|       "SUPER,          up,            movefocus,u" | ||||
|       "SUPER,          down,          movefocus,d" | ||||
| 
 | ||||
|       # Move | ||||
| 
 | ||||
|       "SUPERSHIFT,     left,          movewindow,l" | ||||
|       "SUPERSHIFT,     right,         movewindow,r" | ||||
|       "SUPERSHIFT,     up,            movewindow,u" | ||||
|       "SUPERSHIFT,     down,          movewindow,d" | ||||
| 
 | ||||
|       #Resize | ||||
| 
 | ||||
|       "SUPER CTRL,     left,          resizeactive,-20 0" | ||||
|       "SUPERCTRL,      right,         resizeactive,20 0" | ||||
|       "SUPER CTRL,     up,            resizeactive,0 -20" | ||||
|       "SUPERCTRL,      down,          resizeactive,0 20" | ||||
| 
 | ||||
|       # Switch workspace | ||||
|      | ||||
|       "SUPER,          1,             workspace,1" | ||||
|       "SUPER,          2,             workspace,2" | ||||
|       "SUPER,          3,             workspace,3" | ||||
|       "SUPER,          4,             workspace,4" | ||||
|       "SUPER,          5,             workspace,5" | ||||
|       "SUPER,          6,             workspace,6" | ||||
|       "SUPER,          7,             workspace,7" | ||||
|       "SUPER,          8,             workspace,8" | ||||
|       "SUPER,          9,             workspace,9" | ||||
|       "SUPER,          0,             workspace,10" | ||||
|       "SUPER,          comma,         workspace,e+1" | ||||
|       "SUPER,          period,        workspace,e-1" | ||||
|       "SUPER,          tab,           focusCurrentOrLast" | ||||
| 
 | ||||
|       # Move workspace | ||||
| 
 | ||||
|       "SUPERSHIFT,     1,             movetoworkspace,1" | ||||
|       "SUPERSHIFT,     2,             movetoworkspace,2" | ||||
|       "SUPERSHIFT,     3,             movetoworkspace,3" | ||||
|       "SUPERSHIFT,     4,             movetoworkspace,4" | ||||
|       "SUPERSHIFT,     5,             movetoworkspace,5" | ||||
|       "SUPERSHIFT,     6,             movetoworkspace,6" | ||||
|       "SUPERSHIFT,     7,             movetoworkspace,7" | ||||
|       "SUPERSHIFT,     8,             movetoworkspace,8" | ||||
|       "SUPERSHIFT,     9,             movetoworkspace,9" | ||||
|       "SUPERSHIFT,     0,             movetoworkspace,10" | ||||
| 
 | ||||
|       # Lock Screen | ||||
|       "SUPER,          Backspace,     exec,     ${locker}" | ||||
|     ]; | ||||
|       # Mouse | ||||
|     bindm = [ | ||||
|       "SUPER,          mouse:272,     movewindow" | ||||
|       "SUPER,          mouse:273,     resizewindow" | ||||
|     ]; | ||||
|     # bindr = [ | ||||
|     #   "SUPER, SUPER_L, exec, killall rofi || rofi -show drun" | ||||
|     # ]; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,14 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./appearance.nix | ||||
|     ./binds.nix | ||||
|     ./rules.nix | ||||
|     ./exec.nix | ||||
|     ./env.nix | ||||
|     ./inputs.nix | ||||
|     ./misc.nix | ||||
|     ./monitor.nix | ||||
|     ./gestures.nix | ||||
|     ./hyprpaper.nix | ||||
|   ]; | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| { lib, config, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings.env = [ | ||||
|       "XDG_SESSION_DESKTOP,hyprland" | ||||
|       "XDG_CURRENT_DESKTOP,hyprland" | ||||
|     ];  | ||||
|   }; | ||||
| 
 | ||||
|    | ||||
| } | ||||
|  | @ -0,0 +1,20 @@ | |||
| { config, lib, pkgs, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings = { | ||||
|       exec = [ | ||||
|         "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" | ||||
|       ]; | ||||
|       exec-once = [ | ||||
|         "${pkgs._1password-gui}/bin/1password --silent" | ||||
|         # "${pkgs.live-buds-cli}/bin/earbuds -d" | ||||
|         # "waybar" | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,14 @@ | |||
| { lib, config, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings.gestures = { | ||||
|       workspace_swipe = true; | ||||
|       workspace_swipe_forever = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,19 @@ | |||
| { lib, config, inputs,  ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
|   wallpaperPath = config.homeModules.theme.wallpaper.path; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   imports = [ inputs.hyprpaper.homeManagerModules.hyprpaper ]; | ||||
|    | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     services.hyprpaper = { | ||||
|       enable = true; | ||||
|       preloads = ["${wallpaperPath}"]; | ||||
|       wallpapers = [", ${wallpaperPath}"]; | ||||
|       ipc = false; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| { lib, config, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings.input = { | ||||
|       kb_layout = "us"; | ||||
|       follow_mouse = 1; | ||||
|       touchpad.natural_scroll = "no"; | ||||
|     }; | ||||
|   }; | ||||
|    | ||||
| } | ||||
|  | @ -0,0 +1,21 @@ | |||
| { lib, config, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings.misc = { | ||||
|       mouse_move_enables_dpms = true; | ||||
|       key_press_enables_dpms = true; | ||||
|       disable_hyprland_logo = true; | ||||
|       disable_splash_rendering = true; | ||||
| 
 | ||||
|       enable_swallow = true; | ||||
|       swallow_regex = "foot|nemo"; | ||||
| 
 | ||||
|       focus_on_activate = true; | ||||
|     }; | ||||
|   }; | ||||
| }  | ||||
|  | @ -0,0 +1,20 @@ | |||
| { lib, config, ... }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     wayland.windowManager.hyprland.settings = { | ||||
|       monitor = lib.concatMap (m: let | ||||
|         resolution = "${toString m.width}x${toString m.height}@${toString m.refreshRate}"; | ||||
|         position = "${toString m.x}x${toString m.y}"; | ||||
|         basicConfig = "${m.name},${if m.enabled then "${resolution},${position},1" else "disable"}"; | ||||
|       in | ||||
|         [ basicConfig ] ++ (if m.transform != 0 then ["${m.name},transform,${toString m.transform}"] else []) | ||||
|       ) (config.monitors); | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
|  | @ -0,0 +1,28 @@ | |||
| { lib, config, ... }: | ||||
| let | ||||
|   cfg = config.homeModules.desktop.wayland.windowManager.hyprland; | ||||
| in | ||||
| { | ||||
|   config = { | ||||
|     wayland.windowManager.hyprland.settings = lib.mkIf cfg.enable { | ||||
|       windowrulev2 = [ | ||||
|         "float,move 191 15,size 924 396,class:(1Password)" | ||||
| 
 | ||||
|         "float, title:^(Picture-in-Picture)$" | ||||
|         "pin, title:^(Picture-in-Picture)$" | ||||
| 
 | ||||
|         "workspace 4, title:Vesktop" | ||||
| 
 | ||||
|         # Floating BTOP | ||||
|         "float,title:^(BTOP)$" | ||||
|         "size 85%,title:^(BTOP)$" | ||||
|         "pin,title:^(BTOP)$" | ||||
|         "center,title:^(BTOP)$" | ||||
|         "stayfocused,title:^(BTOP)$" | ||||
| 
 | ||||
|         # Tearing | ||||
|         "immediate, title:^(TEKKEN™8)$"  | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue