diff options
Diffstat (limited to 'nixos/home.nix')
| -rw-r--r-- | nixos/home.nix | 606 |
1 files changed, 560 insertions, 46 deletions
diff --git a/nixos/home.nix b/nixos/home.nix index 9e4241f..b299b23 100644 --- a/nixos/home.nix +++ b/nixos/home.nix @@ -1,9 +1,36 @@ -{ inputs, config, pkgs, ... }: +{ inputs, pkgs, config, ... }: { - home.username = "nantha"; - home.homeDirectory = "/home/nantha"; - home.stateVersion = "26.05"; + 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; @@ -27,7 +54,6 @@ export WINEPREFIX="$XDG_DATA_HOME"/wine export RUSTUP_HOME="$XDG_DATA_HOME"/rustup export CARGO_HOME="$XDG_DATA_HOME"/cargo - export EDITOR=nvim export BROWSER=firefox export TERMINAL=alacritty export PAGER=less @@ -37,47 +63,6 @@ ''; }; - home.file.".config/hypr/hyprland.lua".source = ./config/hypr/hyprland.lua; - home.file.".config/waybar".source = ./config/waybar; - home.file.".config/git".source = ./config/git; - home.file.".config/nvim/init.lua".source = ./config/nvim/init.lua; - home.file.".config/rofi".source = ./config/rofi; - home.file.".config/user-dirs.dirs".source = ./config/user-dirs.dirs; - home.file.".local/bin/unblock-pipewire.sh".source = ./bin/unblock-pipewire.sh; - - home.packages = with pkgs; [ - neovim - nil - - hyprpicker - hyprpaper - dunst - grim - wl-clipboard - xdg-desktop-portal-hyprland - waybar - git - tree - thunderbird - keepassxc - mpv - yt-dlp - pavucontrol - fzf - btop - gimp - rofi - - (pkgs.writeShellApplication { - name = "ns"; - runtimeInputs = with pkgs; [ - fzf - nix-search-tv - ]; - text = builtins.readFile "${pkgs.nix-search-tv.src}/nixpkgs.sh"; - }) - ]; - programs.alacritty = { enable = true; theme = "tokyo_night"; @@ -126,4 +111,533 @@ ]; }; }; + + 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; + }; } |
