{ inputs , outputs , lib , config , pkgs , ... }: { home = { username = "kalle"; homeDirectory = "/home/kalle"; }; imports = [ ../../nvim ../../tmux ../../eww ../../hyprland ../../hyprland/hyprpaper.nix ]; hyprland = let mod = "SUPER"; in { mod = mod; primaryMonitor = "DP-2"; monitors = [ { name = "DP-2"; width = 1920; height = 1080; refreshRate = 144; x = 0; y = 1080; vrr = 1; } { name = "HDMI-A-1"; width = 1920; height = 1080; x = 1500; y = 0; } { name = "HDMI-A-2"; width = 1920; height = 1080; x = 1920; y = 1080; transform = 3; } ]; autoStart = [ # Bar "${pkgs.dunst}/bin/dunst" "${pkgs.firefox}/bin/firefox" "${pkgs.discord}/bin/discord" ]; environment = { XCURSOR_SIZE = "24"; QT_QPA_PLATFORMTHEME = "qt5ct"; }; sensitivity = 0.1; keyboard = { layout = "us"; variant = ""; options = ""; }; inner_gaps = 5; outer_gaps = 10; border = { size = 1; active = "rgba(33ccffee) rgba(00ff99ee) 45deg"; inactive = "rgba(595959aa)"; }; layout = "dwindle"; rounding = 5; layerRules = { "gtk-layer-shell" = [ "blur" "ignorezero" ]; }; windowRules = { # Auto workspace firefox = [ "workspace 1 silent" ]; discord = [ "workspace name:HDMI-A-2" ]; }; windowRulesV2 = { # ULauncher "class:^(ulauncher)$" = [ "forceinput" "dimaround" ]; }; # Media keys # bind = ,XF86AudioPlay, exec, playerctl --player plasma-browser-integration play-pause # bind = ,XF86AudioPrev, exec, playerctl previous # bind = ,XF86AudioNext, exec, playerctl next # bind = ,XF86AudioLowerVolume, exec, playerctl --player plasma-browser-integration volume 0.01- # bind = ,XF86AudioRaiseVolume, exec, playerctl --player plasma-browser-integration volume 0.01+ # This is a dumb work around for hyprland not passing ALT half the time with the pass dispatcher. # bind = ALT, M, exec, xdotool key 'ALT+m' # bind = ALT, B, exec, xdotool key 'ALT+b' binds = { "${mod}, return" = "exec, kitty"; "${mod}, E" = "exec, ulauncher-toggle #wofi --show drun"; "${mod}, Print" = "exec, bash -c \"grim -g \\\"$(slurp)\\\" - | wl-copy\""; # Clipboard history # bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy }; mouseBinds = { }; }; hyprpaper = { wallpaperFolder = "/home/kalle/Pictures/Wallpapers"; }; services.dunst = { enable = true; settings = { global = { monitor = 0; follow = "none"; width = 300; height = 300; origin = "top-left"; offset = "10x10"; scale = 0; notification_limit = 20; progress_bar = true; progress_bar_height = 10; progress_bar_frame_width = 0; progress_bar_min_width = 150; progress_bar_max_width = 300; progress_bar_corner_radius = 0; icon_corner_radius = 0; indicate_hidden = "yes"; transparency = "0.3"; separator_height = 2; padding = 8; horizontal_padding = 8; text_icon_padding = 0; frame_width = 0; frame_color = "#aaaaaa"; gap_size = 10; separator_color = "frame"; sort = "yes"; font = "Monospace 8"; line_height = 0; markup = "full"; format = "%s\n%b"; alignment = "left"; vertical_alignment = "center"; show_age_threshold = 60; ellipsize = "middle"; ignore_newline = "no"; stack_duplicates = true; hide_duplicate_count = false; show_indicators = "yes"; enable_recursive_icon_lookup = true; icon_theme = "Adwaita"; icon_position = "left"; min_icon_size = 32; max_icon_size = 128; icon_path = "/usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/"; sticky_history = "yes"; history_length = 20; dmenu = "/usr/bin/dmenu -p dunst:"; browser = "/usr/bin/xdg-open"; always_run_script = true; title = "Dunst"; class = "Dunst"; corner_radius = 0; ignore_dbusclose = false; force_xwayland = false; force_xinerama = false; mouse_left_click = "close_current"; mouse_middle_click = "do_action, close_current"; mouse_right_click = "close_all"; }; experimental = { per_monitor_dpi = false; }; urgency_low = { background = "#222222"; foreground = "#888888"; timeout = 10; }; urgency_normal = { background = "#285577"; foreground = "#ffffff"; timeout = 10; }; urgency_critical = { background = "#900000"; foreground = "#ffffff"; frame_color = "#ff0000"; timeout = 0; }; }; }; nixpkgs = { overlays = with outputs.overlays; [ nvim-plugins ]; config = { allowUnfree = true; allowUnfreePredicate = _: true; permittedInsecurePackages = [ "electron-25.9.0" ]; }; }; # The home.packages option allows you to install Nix packages into your # environment. home.packages = with pkgs; [ discord vesktop firefox chromium httpie kate dolphin ark rustup gcc prismlauncher pavucontrol difftastic sops obsidian cachix ]; programs.home-manager.enable = true; gtk = { theme = { package = pkgs.libsForQt5.breeze-gtk; name = "Breeze-Dark"; }; iconTheme = { package = pkgs.libsForQt5.breeze-icons; name = "breeze-dark"; }; }; programs.bash = { enable = true; shellAliases = { # Git aliases gg = "git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an (%ae)%C(reset)' --all"; gca = "git add -A; git commit -a --amend --no-edit"; gs = "git status"; # Replace some commands with better versions ssh = "kitty +kitten ssh"; diff = "${pkgs.difftastic}/bin/difftastic"; }; initExtra = '' function open() { xdg-open $@ &> /dev/null & } ''; }; programs.kitty = { enable = true; theme = "Catppuccin-Mocha"; settings = { background_opacity = "0.8"; allow_remote_control = true; }; }; programs.starship = { enable = true; settings = { add_newline = true; # Remove text from nix shell component nix_shell.format = "via [$symbol]($style) "; git_status.disabled = true; package.disabled = true; }; }; programs.direnv = { enable = true; enableBashIntegration = true; nix-direnv.enable = true; }; programs.git = { enable = true; userName = "Kalle Struik"; userEmail = "kalle@kallestruik.nl"; difftastic.enable = true; extraConfig = { init.defaultBranch = "main"; }; }; home.sessionVariables = { EDITOR = "nvim"; }; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release # introduces backwards incompatible changes. # # You should not change this value, even if you update Home Manager. If you do # want to update the value, then make sure to first check the Home Manager # release notes. home.stateVersion = "23.05"; # Please read the comment before changing. }