{ config, pkgs, lib, inputs, ... }: { imports = [ inputs.home-manager.nixosModules.home-manager inputs.stylix.nixosModules.stylix inputs.nixvim.homeManagerModules.nixvim ]; kyouma.machine-type.graphical = true; deployment.allowLocalDeployment = true; services.geoclue2.enable = true; services.pipewire = { enable = true; alsa.enable = true; pulse.enable = true; }; environment.variables = { SDL_VIDEODRIVER = "wayland"; QT_QPA_PLATFORM = "wayland"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; GDK_BACKEND = "wayland,x11"; MOZ_ENABLE_WAYLAND = "1"; CLUTTER_BACKEND = "wayland"; }; xdg.portal.wlr.enable = true; stylix= { base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-macchiato.yaml"; fonts = { sansSerif = { package = pkgs.noto-fonts; name = "Noto Sans"; }; serif = config.stylix.fonts.sansSerif; monospace = { package = pkgs.jetbrains-mono; name = "JetBrainsMono-Regular"; }; sizes.terminal = 11; }; cursor = { package = pkgs.capitaine-cursors; name = "capitaine"; size = 24; }; }; home-manager.users.emily = { stylix.tagets = { hyprland.enable = false; kitty.enable = false; mako.enable = false; rofi.enable = false; swaylock.enabke = false; waybar.enable = false; nixvim.enable = false; }; home.keyboard = { layout = "de"; variant = "neo_qwerty"; }; home.file.".local/bin/hypr/playerctl.sh" = let playerctl = "${pkgs.playerctl}/bin/playerctl"; title = "$(${playerctl} metadata --format '{{markup_escape(title)}}')"; artist = "$(${playerctl} metadata --format '{{markup_escape(artist)}}')"; status = "$(${playerctl} status 2> /dev/null)"; in { enable = true; executable = true; text = '' #!${pkgs.bash}/bin/bash if [ "${status}" = "Playing" ]; then echo -e " ${title}\nPlaying: ${artist} - ${title}\nplaying" elif [ "${status}" = "Paused" ]; then echo -e " ${title}\nPaused: ${artist} - ${title}\npaused" else echo -e "" fi ''; }; home.file.".local/bin/hypr" = { enable = true; executable = true; recursive = true; source = ./files/scripts; }; home.file.".config/mako-icons/" = { enable = true; recursive = true; source = ./files/icons; }; home.file.".config/rofi" = { enable = true; recursive = true; source = .files/rofi; }; wayland.windowManager.hyprland = { enable = true; settings = let kitty = "${pkgs.kitty}/bin/kitty"; pactl = "${pkgs.pulseaudio}/bin/pactl"; playerctl = "${pkgs.playerctl}/bin/playerctl"; notifysend = "${pkgs.libnotify}/bin/notify-send"; swaylock = "${pkgs.swaylock}/bin/swaylock"; dolphin = "${pkgs.libsForQt5.dolphin}/bin/dolphin"; firefox = "${pkgs.firefox}/bin/firefox"; brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl"; screenshot = "~/.local/bin/hypr/screenshot.sh"; rofi = "${pkgs.rofi-wayland}/bin/rofi"; in { general = { border_size = 1; gaps_in = 4; gaps_out = 8; "col.active_border" = "0xFFB4A1DB 0xFFD04E9D 45deg"; "col.inactive_border" = "1e2030 1e2030 45deg"; cursor_inactive_timeout = 30; layout = "dwindle"; }; decoration = { rounding = 8; shadow_range = 10; "col.shadow" = "0x66000000"; "col.shadow_inactive" = "0x66000000"; blur = { enabled = true; passes = 2; }; }; animations = { bezier = [ "wind, 0.05, 0.9, 0.1, 1.05" "winMov, 0.05, 0.9, 0.1, 1.1" "winIn, 0.1, 1.1, 0.1, 1.1" "winOut, 0.3, -0.3, 0, 1" "liner, 1, 1, 1, 1" ]; animation = [ "windows, 1, 6, wind, slide" "windowsIn, 1, 8, winIn, slide" "windowsOut, 1, 5, winOut, slide" "windowsMove, 1, 6, winMov, slide" "border, 1, 1, liner" "borderangle, 1, 30, liner, loop" "fade, 1, 10, default" "workspaces, 1, 8, wind" ]; }; input = { kb_layout = "de"; kb_variant = "neo_qwerty"; kb_options = "grp:alt_shift_toggle"; accel_profile = "adaptive"; scroll_method = "2fg"; float_switch_override_focus = 2; touchpad = { natural_scroll = true; scroll_factor = 0; tap-to-click = false; drag_lock = true; }; }; gestures = { workspace_swipe = true; workspace_swipe_min_speed_to_force = 15; workspace_swipe_cancel_ratio = 0.3; workspace_swipe_forever = true; }; group = { "col.border_inactive" = "0xFFDB695B"; "col.border_active" = "0xFF4BC66D"; groupbar = { render_titles = false; }; }; misc = { disable_hyprland_logo = true; vrr = 1; }; xwayland = { use_nearest_neighbor = false; force_zero_scaling = true; }; "device:syna8013:00-06cb:ce69-touchpad" = { sensitivity = 0.3; }; "device:logitech-m705" = { sensitivity = 0.1; accel_profile = "flat"; }; "device:tpps/2-ibm-trackpoint" = { sensitivity = 0.2; scroll_method = "on_button_down"; accel_profile = "flat"; }; "device:tpps/2-elan-trackpoint" = { sensitivity = 0; scroll_method = "on_button_down"; accel_profile = "flat"; }; "device:tpps/2-elan-trackpoint" = { sensitivity = 0; scroll_method = "on_button_down"; accel_profile = "flat"; }; monitor = [ "eDP-1, 3840x2400@60, 0x0, 1, bitdepth, 10" "eDP-1, addreserved,-8,0,0,0" "desc:ASUSTek COMPUTER INC ASUS VA24E M7LMTF021529, 1920x1080@60, -320x-1080, 1" "desc:ASUSTek COMPUTER INC ASUS VA24E M7LMTF021525, 1920x1080@60, 1600x-1080, 1" ",preferred,auto,1" ]; workspace = [ "1, monitor:eDP-1, default:true" "2, monitor:eDP-1" "3, monitor:eDP-1" "8, monitor:DP-2" "9, monitor:DP-3" "10, monitor:eDP-1" ]; windowrule = [ "float, foot-float" "float, yad|nm-connection-editor|pavucontrol" "float, xfce-polkit|kvantummanager|qt5ct|zenity|waypaper" "float, feh|com.github.weclaw1.ImageRoll|Gpicview|Gimp|MPlayer" "float, VirtualBox Manager|qemu|Qemu-system-x86_64|PacketTracer" "float, title:File Operation Progress|Open Files|Media viewer" "float, title:Confirm to replace files" "size 60% 64%, com.github.weclaw1.ImageRoll " "center, com.github.weclaw1.ImageRoll" "animation slide down,foot-full" "animation slide up,Rofi" ]; "$mod" = "SUPER"; "$notifycmd" = "${notifysend} -h string:x-canonical-private-synchronous:hypr-cfg -u low"; bind = [ "$mod, Return, exec, ${kitty}" "$mod, F1, exec, ${dolphin}" "$mod, F2, exec, ${firefox}" # Rofi "$mod, D, exec, ${rofi} -show drun -theme ~/.config/rofi/launcher.rasi" "$mod, R, exec, ${rofi} -show run -theme ~/.config/rofi/runner.rasi" "$mod, X, exec, ~/.local/bin/hypr/rofi_powermenu.sh" "$mod, A, exec, ~/.local/bin/hypr/rofi_screenshot.sh" # Misc "$mod, C, exec, ~/.local/bin/hypr/colorpicker.sh" "CTRL_ALT, L, exec, ${swaylock} -f -i ~/Pictures/wallpapers/lockscreen.png" # Function keys ", XF86MonBrightnessUp, exec, ${brightnessctl} s +10%" ", XF86MonBrightnessDown, exec, ${brightnessctl} s 10%-" ", XF86AudioRaiseVolume, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ +2dB" ", XF86AudioLowerVolume, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ -2dB" ", XF86AudioMute, exec, ${pactl} set-sink-mute @DEFAULT_SINK@ toggle" ", XF86AudioMicMute, exec, ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle" ", XF86AudioNext, exec, ${playerctl} next" ", XF86AudioPrev, exec, ${playerctl} previous" ", XF86AudioPlay, exec, ${playerctl} play" ", XF86AudioStop, exec, ${playerctl} pause" # Scratchpad "$mod SHIFT, MINUS, movetoworkspace,special" "$mod, MINUS, togglespecialworkspace," # Screenshots ", Print, exec, ${screenshot} --now" "ALT, Print, exec, ${screenshot} --in5" "SHIFT, Print, exec, ${screenshot} --in10" "CTRL, Print, exec, ${screenshot} --win" "$mod, Print, exec, ${screenshot} --area" # Hyprland "$mod SHIFT, Q, killactive," "CTRL_ALT, Delete, exit," "$mod, F, fullscreen, 0" "$mod, F, exec, $notifycmd 'Fullscreen Mode'" "$mod, S, pseudo," "$mod, S, exec, $notifycmd 'Pseudo Mode'" "$mod SHIFT, Space, togglefloating," "$mod SHIFT, Space, centerwindow," # windowgroup "$mod, G, togglegroup" "$mod, G, exec, $notifycmd 'Toggled Group Mode'" "$mod, H, changegroupactive, b" "$mod, L, changegroupactive, f" # Change Focusconfig "$mod, left, movefocus, l" "$mod, H, movefocus, l" "$mod, right, movefocus, r" "$mod, L, movefocus, r" "$mod, up, movefocus, u" "$mod, K, movefocus, u" "$mod, down, movefocus, d" "$mod, J, movefocus, d" # Move Active "$mod SHIFT, left, movewindow, l" "$mod SHIFT, H, movewindow, l" "$mod SHIFT, right, movewindow, r" "$mod SHIFT, L, movewindow, r" "$mod SHIFT, up, movewindow, u" "$mod SHIFT, K, movewindow, u" "$mod SHIFT, down, movewindow, d" "$mod SHIFT, J, movewindow, d" # Switch between windows "$mod,Tab,cyclenext," "$mod,Tab,bringactivetotop," # Workspaces "$mod, 1, workspace, 1" "$mod, 2, workspace, 2" "$mod, 3, workspace, 3" "$mod, 4, workspace, 4" "$mod, 5, workspace, 5" "$mod, 6, workspace, 6" "$mod, 7, workspace, 7" "$mod, 8, workspace, 8" "$mod, 9, workspace, 9" "$mod, 0, workspace, 10" # Send to Workspaces "$mod SHIFT, 1, movetoworkspace, 1" "$mod SHIFT, 2, movetoworkspace, 2" "$mod SHIFT, 3, movetoworkspace, 3" "$mod SHIFT, 4, movetoworkspace, 4" "$mod SHIFT, 5, movetoworkspace, 5" "$mod SHIFT, 6, movetoworkspace, 6" "$mod SHIFT, 7, movetoworkspace, 7" "$mod SHIFT, 8, movetoworkspace, 8" "$mod SHIFT, 9, movetoworkspace, 9" "$mod SHIFT, 0, movetoworkspace, 10" # Change Workspace Mode "$mod CTRL, F, workspaceopt, allfloat" "$mod CTRL, F, exec, $notifycmd 'Toggled All Float Mode'" "$mod CTRL, S, workspaceopt, allpseudo" "$mod CTRL, S, exec, $notifycmd 'Toggled All Pseudo Mode'" # Misc "$mod SHIFT, P, pin," "$mod SHIFT, P, exec, $notifycmd 'Toggled Pin'" "$mod SHIFT, S, swapnext" "$mod SHIFT, O, toggleopaque" ]; binde = [ # Resize Active "$mod CTRL, left, resizeactive, -20 0" "$mod CTRL, H, resizeactive, -20 0" "$mod CTRL, right, resizeactive, 20 0" "$mod CTRL, L, resizeactive, 20 0" "$mod CTRL, up, resizeactive, 0 -20" "$mod CTRL, K, resizeactive, 0 -20" "$mod CTRL, down, resizeactive, 0 20" "$mod CTRL, J, resizeactive, 0 20" # Move Active (Floating Only) "$mod ALT, left, moveactive, -80 0" "$mod ALT, H, moveactive, -80 0" "$mod ALT, right, moveactive, 80 0" "$mod ALT, L, moveactive, 80 0" "$mod ALT, up, moveactive, 0 -80" "$mod ALT, K, moveactive, 0 -80" "$mod ALT, down, moveactive, 0 80" "$mod ALT, J, moveactive, 0 80" ]; bindl = [ ",switch:Lid Switch, exec, ${swaylock} -f -i ~/Pictures/wallpapers/lockscreen.png" ]; bindm = [ "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" ]; }; }; programs.imv.enable = true; programs.nixvim = { extraPlugins. = [ pkgs.vimPlugins.molokai ]; coloscheme = "molokai"; vimAlias = true; highlight.Normal = { ctermbg = "NONE"; guibg = "NONE"; }; options = { number = true; autoindent = true; mouse = false; encoding = "utf-8"; shiftwidth = 2; smartindent = true; tabstop = 2; ignorecase = true; incsearch = true; smartcase = true; }; keymaps = [ { action = "Neotree toggle"; key = ""; mode = "n"; options.silent = true; } { action = ""; key = ""; mode = "t"; } ]; plugins.nvim-cmp = { enable = true; sources = [ { name = "nvim_lsp"; } { name = "luasnip"; } { name = "buffer"; } { name = "nvim_lua"; } { name = "path"; } ]; formatting = { fields = [ "abbr" "kind" "menu" ]; format = '' function(_, item) local icons = { Namespace = "󰌗", Text = "󰉿", Method = "󰆧", Function = "󰆧", Constructor = "", Field = "󰜢", Variable = "󰀫", Class = "󰠱", Interface = "", Module = "", Property = "󰜢", Unit = "󰑭", Value = "󰎠", Enum = "", Keyword = "󰌋", Snippet = "", Color = "󰏘", File = "󰈚", Reference = "󰈇", Folder = "󰉋", EnumMember = "", Constant = "󰏿", Struct = "󰙅", Event = "", Operator = "󰆕", TypeParameter = "󰊄", Table = "", Object = "󰅩", Tag = "", Array = "[]", Boolean = "", Number = "", Null = "󰟢", String = "󰉿", Calendar = "", Watch = "󰥔", Package = "", Copilot = "", Codeium = "", TabNine = "", } local icon = icons[item.kind] or "" item.kind = string.format("%s %s", icon, item.kind or "") return item end ''; }; snippet = { expand = "luasnip"; }; window = { completion = { winhighlight = "FloatBorder:CmpBorder,Normal:CmpPmenu,CursorLine:CmpSel,Search:PmenuSel"; scrollbar = false; sidePadding = 0; border = [ "╭" "─" "╮" "│" "╯" "─" "╰" "│" ]; }; documentation = { border = [ "╭" "─" "╮" "│" "╯" "─" "╰" "│" ]; winhighlight = "FloatBorder:CmpBorder,Normal:CmpPmenu,CursorLine:CmpSel,Search:PmenuSel"; }; }; mapping = { "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true })"; "" = { modes = [ "i" "s" ]; action = '' function(fallback) if cmp.visible() then cmp.select_next_item() elseif require("luasnip").expand_or_jumpable() then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") else fallback() end end ''; }; "" = { modes = [ "i" "s" ]; action = '' function(fallback) if cmp.visible() then cmp.select_prev_item() elseif require("luasnip").jumpable(-1) then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") else fallback() end end ''; }; }; }; plugins.lsp = { enable = true; keymaps.lspBuf = { "K" = "hover"; "gd" = "definition"; "gD" = "references"; "gt" = "type_definition"; "gi" = "implementation"; }; servers = { bashls.enable = true; lua-ls.enable = true; nixd.enable = true; ruff-lsp.enable = true; }; }; plugins.none-ls = { enable = true; sources.diagnostics = { pylint.enable = true; shellcheck.enable = true; statix.enable = true; }; sources.formatting = { nixfmt.enable = true; markdownlint.enable = true; rustfmt.enable = true; }; }; plugins.neo-tree = { enable = true; closeIfLastWindow = true; }; plugins.treesitter = { enable = true; nixGrammars = true; indent = true; }; plugins.cmp-buffer.enable = true; plugins.cmp-emoji.enable = true; plugins.cmp-nvim-lsp.enable = true; plugins.cmp-path.enable = true; plugins.cmp_luasnip.enable = true; plugins.luasnip.enable = true; plugins.lightline.enable = true; plugins.rainbow-delimiters.enable = true; plugins.rustaceanvim.enable = true; plugins.treesitter-context.enable = true; }; programs.wpaperd = { enable = true; settings.default = { path = "/home/emily/Pictures/wallpapers/sylviaritter/"; duration = "60m"; sorting = "random"; }; }; programs.waybar = { enable = true; style = ./waybar-style.css; systemd = { enable = true; target = "hyprland-session.target"; }; settings = { hyprbar = { layer = "top"; position = "top"; output = "eDP-1"; margin = "0 0 0 0"; modules-left = [ "hyprland/workspaces" "custom/playerctl" "tray" ]; modules-center = [ "clock" ]; modules-right = [ "backlight" "pulseaudio" "temperature" "cpu" "memory" "battery" "network" ]; "hyprland/workspaces" = { format = "{icon}"; sort-by-number = true; active-only = false; on-click = "activate"; format-icons = { "10" = "0"; urgent = ""; focused = ""; default = ""; }; }; idle_inhibitor = { format = "{icon}"; format-icons = { activated = ""; deactivated = ""; }; }; tray = { icon-size = 18; spacing = 8; }; clock = { tooltip-format = "{:%A %d %B | %H:%M}"; format = " {:%Y-%m-%d  %H:%M:%OS}"; format-alt = " {:%Y %b %d %a  %H:%M:%OS}"; interval = 1; }; cpu = { format = " {usage:02}"; interval = 2; on-click = "kitty -e htop"; }; memory = { format = " {used:0.2f}"; on-click = "kitty -e htop"; }; temperature = { hwmon-path = "/sys/class/hwmon/hwmon1/temp1_input"; critical-threshold = 80; format = " {temperatureC}°C"; }; backlight = { format = "{icon} {percent: >3}%"; format-icons = ["", ""]; on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl -c backlight set 1%-"; on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl -c backlight set +1%"; }; battery = { states = { good = 90; warning = 30; critical = 15; }; format = "\uf1e6"; format-discharging = "{icon} {capacity: >3}% {power:0.1f}W"; format-charging = "\uf1e6 {capacity: >3}% {power:0.1f}W"; interval = 3; format-icons = ["", "", "", "", ""]; }; network = { format = "⚠ Disabled"; format-wifi = " {essid}"; format-ethernet = " Wired"; format-disconnected = "⚠ Disconnected"; on-click = "nm-connection-editor"; }; pulseaudio = { scroll-step = 5; format = "{icon} {volume: >3}%"; format-bluetooth = "{icon} {volume: >3}%"; format-muted = " muted"; format-icons = { headphones = ""; handsfree = ""; headset = ""; phone = ""; portable = ""; car = ""; default = ["", ""]; }; on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; }; "custom/playerctl" = { interval = 1; exec = "~/.local/bin/hypr/playerctl.sh"; on-click-middle = "${pkgs.playerctl}/bin/playerctl play-pause"; on-click-right = "${pkgs.playerctl}/bin/playerctl next"; on-click = "${pkgs.playerctl}/bin/playerctl previous"; escape = true; }; }; }; }; programs.kitty = { enable = true; font.size = "11"; font.name = "JetBrains Mono"; settings = { enable_audio_bell = false; scrollback_lines = 65536; remember_window_size = false; initial_window_width = 1200; initial_window_height = 800; bold_font = "auto"; italic_font = "auto"; bold_italic_font = "auto"; background = "#090312"; background_opacity = "0.7"; }; keybindings = { "shift+right" = "next_tab"; "ctrl+l" = "next_tab"; "shift+left" = "previous_tab"; "ctrl+h" = "previous_tab"; }; }; programs.rofi = { enable = true; package = pkgs.rofi-wayland; }; services.gammastep = { enable = true; provider = "geoclue2"; temperature.day = "6500"; temperature.night = "3700"; settings.general.adjustment-method = "wayland"; }; services.mako = { enable = true; anchor = "top-right"; backgroundColor = "#24273a"; borderColor = "#c6a0f6"; borderRadius = 15; borderSize = 2; defaultTimeout = 5000; layer = "overlay"; maxIconSize = 48; padding = "15"; progressColor = "over #B4A1DB"; sort = "-time"; textColor = "#cad3f5"; extraConfig = '' max-history=100 on-button-left=dismiss on-button-right=dismiss-all on-notify=exec ${pkgs.mpv}/bin/mpv /usr/share/sounds/freedesktop/stereo/message.oga [urgency=low] border-color=#B4A1DB default-timeout=2000 [urgency=normal] border-color=#B4A1DB default-timeout=5000 [urgency=high] border-color=#D04E9D text-color=#D04E9D default-timeout=0 [category=mpd] border-color=#E49186 default-timeout=2000 group-by=category ''; }; services.gpg-agent = { enable = true; enableSshSupport = true; }; services.syncthing = { enable = true; tray.enable = true; }; }; }