{ inputs, pkgs, config, ... }: { home = { username = "nantha"; homeDirectory = "/home/nantha"; stateVersion = "26.05"; file.".local/bin/unblock-pipewire.sh".source = ./bin/unblock-pipewire.sh; packages = with pkgs; [ hyprpicker grim wl-clipboard xdg-desktop-portal-hyprland tree thunderbird gimp hyprpaper dunst hyprpwcenter hyprshutdown (pkgs.writeShellApplication { name = "ns"; runtimeInputs = with pkgs; [ fzf nix-search-tv ]; text = builtins.readFile "${pkgs.nix-search-tv.src}/nixpkgs.sh"; }) ]; }; programs.bash = { enable = true; shellAliases = { ls = "ls -la --color=auto"; rm = "rm -v"; cp = "cp -v"; ln = "ln -v"; mkdir = "mkdir -v"; touch = "touch -v"; }; initExtra = '' export XDG_CONFIG_HOME=$HOME/.config export XDG_DATA_HOME=$HOME/.local/share export XDG_STATE_HOME=$HOME/.local/state export XDG_CACHE_HOME=$HOME/.cache export ANDROID_USER_HOME="$XDG_DATA_HOME"/android export GNUPGHOME="$XDG_DATA_HOME"/gnupg export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc export NODE_REPL_HISTORY="$XDG_DATA_HOME"/node_repl_history export WINEPREFIX="$XDG_DATA_HOME"/wine export RUSTUP_HOME="$XDG_DATA_HOME"/rustup export CARGO_HOME="$XDG_DATA_HOME"/cargo export BROWSER=firefox export TERMINAL=alacritty export PAGER=less ''; profileExtra = '' [ "$(tty)" == "/dev/tty1" ] && start-hyprland ''; }; programs.alacritty = { enable = true; theme = "tokyo_night"; settings = { window = { padding = { x = 10; y = 10; }; opacity = 0.73; }; font = { normal = { family = "0xProto Nerd Font"; style = "Regular"; }; size = 15; }; }; }; programs.firefox = { enable = true; languagePacks = [ "fr-FR" ]; profiles.nantha = { id = 0; extensions.packages = with inputs.firefox-addons.packages.${pkgs.system}; [ ublock-origin ]; search.default = "ddg"; }; }; services.hyprpaper = { enable = true; settings = { splash = false; preload = [ "~/images/wallpaper.png" ]; wallpaper = [ { monitor = ""; path = "~/images/wallpaper.png"; } ]; }; }; services.dunst = { enable = true; iconTheme = { name = "Adwaita"; package = pkgs.adwaita-icon-theme; size = "16x16"; }; settings = { global = { background = "#1A1B26"; foreground = "#FFFFFF"; frame_color = "#3B4261"; frame_width = 5; timeout = 10; alignment = "center"; enable_recursive_icon_lookup = true; padding = 5; horizontal_padding = 5; font = "0xProto Nerd font 15"; corner_radius = 0; separator_height = 5; }; urgency_low = { background = "#7aa2f7"; foreground = "#ffffff"; timeout = 10; }; urgency_critical = { background = "#F7768E"; foreground = "#1A1B26"; timeout = 10; }; }; }; programs.btop = { enable = true; settings = { color_theme = "tokyo-night"; theme_background = false; }; }; programs.waybar = { enable = true; systemd.enable = true; settings = { mainBar = { layer = "top"; position = "top"; height = 30; spacing = 8; modules-left = [ "hyprland/workspaces" "hyprland/window" ]; modules-center = []; modules-right = [ "tray" "network" "pulseaudio" "battery" "cpu" "memory" "disk" "clock" ]; "pulseaudio" = { format = "VOL: {volume}%"; format-muted = "MUTED"; on-click = "sh ~/.local/bin/unblock-pipewire.sh"; }; "hyprland/workspaces" = { format = "{name}"; persistent-workspaces = { "*" = 10; }; }; "hyprland/window" = { max-length = 40; separate-outputs = false; }; "tray" = { spacing = 10; }; "clock" = { format = "{:%H:%M:%S}"; format-alt = "{:%Y-%m-%d}"; tooltip = false; interval = 1; }; "cpu" = { format = "CPU: {usage}%"; tooltip = false; }; "memory" = { format = "RAM: {used}GiB"; }; "disk" = { interval = 60; path = "/"; format = "ROOT: {free}"; }; "battery" = { states = { good = 95; warning = 30; critical = 15; }; format = "BAT: {capacity}%"; format-plugged = "BAT!: {capacity}%"; }; "network" = { format = "ONLINE"; format-disconnected = "OFFLINE"; }; }; }; style = '' @define-color bg #1a1b26; @define-color fg #a9b1d6; @define-color blk #32344a; @define-color red #f7768e; @define-color grn #9ece6a; @define-color ylw #e0af68; @define-color blu #7aa2f7; @define-color mag #ad8ee6; @define-color cyn #0db9d7; @define-color brblk #444b6a; @define-color white #ffffff; * { font-family: "0xProto Nerd Font", monospace; font-size: 16px; font-weight: bold; } window#waybar { background-color: @bg; color: @fg; } #workspaces button { padding: 0 6px; color: @cyn; background: transparent; border-bottom: 3px solid @bg; } #workspaces button.active { color: @cyn; border-bottom: 3px solid @mag; } #workspaces button.empty { color: @white; } #workspaces button.empty.active { color: @cyn; border-bottom: 3px solid @mag; } #workspaces button.urgent { background-color: @red; } button:hover { background: inherit; box-shadow: inset 0 -3px #ffffff; } #clock, #custom-sep, #battery, #cpu, #memory, #disk, #network, #tray, #pulseaudio { padding: 0 8px; color: @white; } #clock { color: @cyn; border-bottom: 4px solid @cyn; } #battery { color: @mag; border-bottom: 4px solid @mag; } #disk { color: @ylw; border-bottom: 4px solid @ylw; } #memory { color: @mag; border-bottom: 4px solid @mag; } #cpu { color: @grn; border-bottom: 4px solid @grn; } #network { color: @blu; border-bottom: 4px solid @blu; } #network.disconnected { background-color: @red; } #tray { background-color: #2980b9; } #pulseaudio { color: @grn; border-bottom: 4px solid @grn; } ''; }; programs.git = { enable = true; settings = { user = { email = "nantha@mielota.com"; name = "Nantha Sorubakanthan"; }; init = { defaultBranch = "main"; }; core = { editor = "hx"; autocrlf = "input"; }; color = { ui = true; }; }; }; programs.helix = { enable = true; defaultEditor = true; ignores = [ "!.gitignore" ]; extraPackages = [ pkgs.nil ]; languages = { nix = { auto-format = true; }; }; settings = { theme = "tokyonight-glass"; editor = { continue-comments = true; line-number = "absolute"; end-of-line-diagnostics = "hint"; auto-completion = true; auto-format = false; path-completion = true; default-yank-register = "+"; completion-trigger-len = 1; color-modes = true; text-width = 80; indent-guides = { render = true; skip-levels = 1; }; whitespace.render = "all"; soft-wrap.enable = true; file-picker.hidden = false; lsp.display-messages = true; statusline.left = [ "mode" "spinner" "version-control" "file-name" ]; inline-diagnostics = { cursor-line = "error"; other-lines = "disable"; }; }; keys.normal = { x = "select_line_below"; X = "select_line_above"; }; }; themes = { tokyonight-glass = let transparent = "none"; in { inherits = "tokyonight"; "ui.menu" = transparent; "ui.statusline".bg = transparent; "ui.menu.selected".bg = transparent; "ui.background" = transparent; }; }; }; programs.aria2 = { enable = true; }; programs.yt-dlp = { enable = true; settings = { downloader = "aria2c"; downloader-args = "aria2c:'-c -x8 -s8 -k1M'"; embed-subs = true; embed-thumbnail = true; sub-langs = "all"; }; }; programs.mpv = { enable = true; }; programs.keepassxc = { enable = true; autostart = false; settings = { Browser.Enabled = true; GUI = { AdvancedSettings = true; ApplicationTheme = "dark"; HidePasswords = true; }; SSHAgent.Enabled = false; }; }; services.hyprlauncher = { enable = true; settings = { cache.enabled = true; finders = { default_finder = "desktop"; unicode_prefix = "."; math_prefix = "="; font_prefix = "'"; desktop_icons = true; }; general.grab_focus = true; ui = { window_size = "400 260"; }; }; }; services.hyprpolkitagent.enable = true; wayland.windowManager.hyprland = { enable = true; systemd = { enable = true; enableXdgAutostart = true; }; xwayland.enable = true; settings = { config = { input = { kb_layout = "fr"; follow_mouse = 1; sensitivity = 0; touchpad = { natural_scroll = true; }; }; general = { gaps_in = 6; gaps_out = 12; border_size = 2; col = { active_border = "rgba(122, 162, 247, 1)"; inactive_border = "rgba(26, 27, 38, 1)"; }; resize_on_border = false; allow_tearing = false; layout = "dwindle"; }; decoration = { rounding = 5; rounding_power = 20; active_opacity = 1.0; inactive_opacity = 1.0; shadow.enabled = false; blur.enabled = true; }; misc = { force_default_wallpaper = 0; disable_hyprland_logo = true; disable_splash_rendering = true; background_color = "#000000"; }; animations.enabled = true; dwindle.preserve_split = true; master.new_status = "master"; scrolling.fullscreen_on_one_column = true; }; gesture = { fingers = 3; direction = "horizontal"; action = "workspace"; }; window_rule = [ { name = "suppress-maximize-events"; match.class = ".*"; suppress_event = "maximize"; } { name = "fix-xwayland-drags"; match = { class = "^$"; title= "^$"; xwayland = true; float = true; fullscreen = false; pin = false; }; } { name = "move-hyprland-run"; match.class = "hyprland-run"; move = "20 monitor_h-120"; float = true; } ]; mod._var = "SUPER"; }; extraConfig = '' if false then hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@100", position = "0x0", scale = "1", }) else hl.monitor({ output = "eDP-1", mode = "1920x1080@60", position = "0x0", scale = "1", }) hl.monitor({ output = "HDMI-A-1", mode = "preferred", position = "auto", scale = "1", mirror = "eDP-1" }) end local terminal = "alacritty" local browser = "firefox" local menu = "hyprlauncher" hl.on("hyprland.start", function() hl.exec_cmd("dunst") hl.exec_cmd("sh ~/.local/bin/unblock-pipewire.sh") end) hl.env("GDK_BACKEND", "wayland,x11,*") hl.env("XDG_CURRENT_DESKTOP", "Hyprland") hl.env("XDG_SESSION_TYPE", "wayland") hl.env("XDG_SESSION_DESKTOP", "Hyprland") hl.env("XCURSOR_THEME", "Bibata-Modern-Ice") hl.env("XCURSOR_SIZE", 24) hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Ice") hl.env("HYPRCURSOR_SIZE", 24) local mainMod = "SUPER" hl.bind(mainMod .. " + A", hl.dsp.window.fullscreen()) hl.bind(mainMod .. " + C", hl.dsp.window.close()) hl.bind(mainMod .. " + D", hl.dsp.exec_cmd("hyprpicker -naq")) hl.bind(mainMod .. " + F", hl.dsp.exec_cmd(browser)) hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'")) hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal)) hl.bind(mainMod .. " + return", hl.dsp.exec_cmd("~/.local/bin/spawn-alacritty-cwd")) hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu)) hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" })) hl.bind(mainMod .. " + h", hl.dsp.focus({ direction = "left" })) hl.bind(mainMod .. " + j", hl.dsp.focus({ direction = "right" })) hl.bind(mainMod .. " + k", hl.dsp.focus({ direction = "up" })) hl.bind(mainMod .. " + l", hl.dsp.focus({ direction = "down" })) hl.bind("print", hl.dsp.exec_cmd("grim -g \"$(slurp)\" - | wl-copy")) hl.bind(mainMod .. " + print", hl.dsp.exec_cmd("grim - | wl-copy")) for i = 1, 10 do local key = i % 11 hl.bind(mainMod .. " + code:" .. key + 9, hl.dsp.focus({ workspace = i })) hl.bind(mainMod .. " + SHIFT + code:" .. key + 9, hl.dsp.window.move({ workspace = i })) end hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic")) hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" })) hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true }) hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true }) hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true }) hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true }) hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true }) hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true }) hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true }) hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true }) ''; }; xdg.userDirs = { enable = true; desktop = "${config.home.homeDirectory}/desktop"; documents = "${config.home.homeDirectory}/sources"; download = "${config.home.homeDirectory}/dl"; music = "${config.home.homeDirectory}/music"; pictures = "${config.home.homeDirectory}/images"; projects = "${config.home.homeDirectory}/images"; publicShare = "${config.home.homeDirectory}/public"; templates = "${config.home.homeDirectory}/trash"; videos = "${config.home.homeDirectory}/videos"; createDirectories = true; }; }