summaryrefslogtreecommitdiff
path: root/nixos/home.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/home.nix')
-rw-r--r--nixos/home.nix606
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;
+ };
}