diff options
| author | Nantha Sorubakanthan <nantha@mielota.com> | 2026-06-08 13:08:37 +0200 |
|---|---|---|
| committer | Nantha Sorubakanthan <nantha@mielota.com> | 2026-06-08 19:58:30 +0200 |
| commit | 770c0cfc08bd73ada6e7754473d69fe9e2d17dc2 (patch) | |
| tree | 3c1da3053ed03bbdc2e8c4e4fbf26947b7ef97ae /nixos | |
| parent | 218a690b155d9e7d47bb2e7487a150c16c8f482f (diff) | |
rewrite config in nix
Diffstat (limited to 'nixos')
| -rw-r--r-- | nixos/config/git/config | 10 | ||||
| -rw-r--r-- | nixos/config/hypr/.luarc.json | 7 | ||||
| -rw-r--r-- | nixos/config/hypr/hyprland.lua | 170 | ||||
| -rw-r--r-- | nixos/config/nvim/init.lua | 207 | ||||
| -rw-r--r-- | nixos/config/rofi/config.rasi | 27 | ||||
| -rw-r--r-- | nixos/config/rofi/tokyonight.rasi | 158 | ||||
| -rw-r--r-- | nixos/config/user-dirs.dirs | 8 | ||||
| -rw-r--r-- | nixos/config/waybar/config.jsonc | 78 | ||||
| -rw-r--r-- | nixos/config/waybar/style.css | 105 | ||||
| -rw-r--r-- | nixos/configuration.nix | 24 | ||||
| -rw-r--r-- | nixos/home.nix | 606 |
11 files changed, 570 insertions, 830 deletions
diff --git a/nixos/config/git/config b/nixos/config/git/config deleted file mode 100644 index a3596b3..0000000 --- a/nixos/config/git/config +++ /dev/null @@ -1,10 +0,0 @@ -[user] - email = nantha@mielota.com - name = Nantha Sorubakanthan -[init] - defaultBranch = main -[core] - editor = nvim - autocrlf = input -[color] - ui = true diff --git a/nixos/config/hypr/.luarc.json b/nixos/config/hypr/.luarc.json deleted file mode 100644 index b4ecec0..0000000 --- a/nixos/config/hypr/.luarc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "workspace": { - "library": [ - "/usr/share/hypr/stubs" - ] - } -} diff --git a/nixos/config/hypr/hyprland.lua b/nixos/config/hypr/hyprland.lua deleted file mode 100644 index 5bfb333..0000000 --- a/nixos/config/hypr/hyprland.lua +++ /dev/null @@ -1,170 +0,0 @@ -hl.config({ - input = { - kb_layout = "fr", - follow_mouse = 1, - sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. - touchpad = { - natural_scroll = true, - }, - }, -}) - -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 = "rofi -show drun" - -hl.on("hyprland.start", function() - hl.exec_cmd("dunst") - hl.exec_cmd("waybar") - hl.exec_cmd("sh ~/.local/bin/unblock-pipewire.sh") - hl.exec_cmd("gsettings set org.gnome.desktop.interface gtk-theme \"Adwaita-dark\"") - hl.exec_cmd("gsettings set org.gnome.desktop.interface color-scheme \"prefer-dark\"") - hl.exec_cmd("hyprpaper") -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) - -hl.config({ - 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, }, - }, - - animations = { enabled = true, }, -}) - -hl.config({ dwindle = { preserve_split = true, }, }) -hl.config({ master = { new_status = "master", }, }) -hl.config({ scrolling = { fullscreen_on_one_column = true, }, }) - -hl.config({ - misc = { - force_default_wallpaper = 0, - disable_hyprland_logo = true, - disable_splash_rendering = true, - background_color = "#000000" - }, -}) - -hl.gesture({ - fingers = 3, - direction = "horizontal", - action = "workspace" -}) - -hl.device({ - name = "epic-mouse-v1", - sensitivity = -0.5, -}) - - -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 .. " + U", hl.dsp.exec_cmd("pkill waybar ; waybar")) -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 }) - - -local suppressMaximizeRule = hl.window_rule({ - -- Ignore maximize requests from all apps. You'll probably like this. - name = "suppress-maximize-events", - match = { class = ".*" }, - suppress_event = "maximize", -}) - --- suppressMaximizeRule:set_enabled(false) - -hl.window_rule({ - name = "fix-xwayland-drags", - match = { - class = "^$", - title = "^$", - xwayland = true, - float = true, - fullscreen = false, - pin = false, - }, - - no_focus = true, -}) - -hl.window_rule({ - name = "move-hyprland-run", - match = { class = "hyprland-run" }, - - move = "20 monitor_h-120", - float = true, -}) diff --git a/nixos/config/nvim/init.lua b/nixos/config/nvim/init.lua deleted file mode 100644 index b9efd3a..0000000 --- a/nixos/config/nvim/init.lua +++ /dev/null @@ -1,207 +0,0 @@ --- GLOBALS - -vim.g.mapleader = " " - -vim.o.number = true -vim.o.relativenumber = false - -vim.o.undofile = true -vim.o.ignorecase = true - -vim.o.expandtab = false -vim.o.shiftwidth = 4 -vim.o.tabstop = 4 -vim.o.softtabstop = 4 -vim.o.smartindent = true -vim.o.autoindent = true - -vim.o.signcolumn = "yes" -vim.o.winborder = 'single' -vim.o.showmode = true -vim.o.guicursor = "" - -vim.o.swapfile = false - -vim.o.cursorline = true - --- •⏎.·○◦ -vim.o.list = true -vim.o.listchars = "tab:🡪 ,trail:·,eol:⏎,space:·,multispace:·,lead:·,leadmultispace:·" - -vim.o.completeopt = "fuzzy,menuone,noselect" -vim.diagnostic.config({ virtual_text = true }) - --- AUTOCOMPLETION - -vim.o.autocomplete = false -vim.o.completeopt = 'menu,menuone,noselect' - --- STATUSBAR - -vim.diagnostic.status() -vim.lsp.status() - --- FRENCH SPELLS - -local spell_path = vim.fn.stdpath("data") .. "/site/spell" -if not (vim.uv.fs_stat(spell_path .. "/fr.utf-8.spl") and vim.uv.fs_stat(spell_path .. "/fr.utf-8.sug")) then - print("Installing french spells") - -- Other mirrors can be found on https://www.vim.org/mirrors.php - local mirror = "https://vim.mirror.garr.it/pub/vim/" .. "runtime/spell/" - local files = { "fr.utf-8.spl", "fr.utf-8.sug" } - vim.fn.mkdir(spell_path, "p") - for _, file in ipairs(files) do - vim.fn.system(string.format("curl -L %s%s -o %s/%s", mirror, file, spell_path, file)) - end -end - -vim.cmd [[set spelllang=en,fr]] -vim.cmd [[set spell]] - --- PLUGINS - -vim.pack.add({ - { src = "https://github.com/neovim/nvim-lspconfig" }, - { src = "https://github.com/ibhagwan/fzf-lua" }, - { src = "https://github.com/mfussenegger/nvim-jdtls" }, - { src = "https://github.com/lewis6991/gitsigns.nvim" }, - { src = "https://github.com/stevearc/oil.nvim" }, - { src = "https://github.com/sphamba/smear-cursor.nvim" }, - { src = "https://github.com/saghen/blink.cmp" }, - { src = "https://github.com/saghen/blink.lib" }, - { src = "https://github.com/folke/tokyonight.nvim" }, - { src = "https://github.com/windwp/nvim-autopairs" } -}) - -vim.cmd [[ - colorscheme tokyonight-night - highlight Normal guibg=none - highlight NonText guibg=none - highlight Normal ctermbg=none - highlight NonText ctermbg=none -]] - - -require("blink.cmp").setup({ keymap = { preset = "enter" } }) -require('blink.cmp').build():wait(60000) -require("nvim-autopairs").setup({}) -require("gitsigns").setup({}) -require("oil").setup({ - default_file_explorer = true, - lsp_file_methods = { - enabled = true, - timeout_ms = 1000, - autosave_changes = true, - }, - columns = { - "permissions", - "size", - }, - float = { - max_width = 0.7, - max_height = 0.6, - border = vim.o.winborder, - }, - buf_options = { - buflisted = false, - bufhidden = "hide", - }, - view_options = { - show_hidden = true, - }, -}) - -require("smear_cursor").setup({ - smear_insert_mode = true, - stiffness = 0.7, - trailing_stiffness = 0.3, - stiffness_insert_mode = 0.7, - trailing_stiffness_insert_mode = 0.7, - damping = 0.67, - damping_insert_mode = 0.67, - distance_stop_animating = 0.4, -}) - -vim.cmd [[Gitsigns toggle_current_line_blame]] - --- MAPPING - -local map = vim.keymap.set - -map("n", "<C-d>", "<C-d>zz") -map("n", "<C-u>", "<C-u>zz") -map("v", "J", ":m '>+1<CR>gv=gv") -map("v", "K", ":m '<-2<CR>gv=gv") -map("n", "n", "nzzzv") -map("n", "N", "Nzzzv") -map("n", "<leader>s", [[%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]]) -map("n", "<leader>e", [[:Oil<CR>]]) -map("n", "<leader><CR>", vim.lsp.buf.format) - -local fzf = require("fzf-lua") -- blazing fast - -map("n", "<leader>F", ":FzfLua<CR>") -map("n", "<leader>f", fzf.files) -map("n", "<leader>t", fzf.treesitter) -map("n", "<leader>/", fzf.live_grep) - --- Configure lua_ls to use neovim runtime or all of lua_ls lib. --- We put way much load on the cpu if we open both. -local lua_ls_lib = {} -local neovim_config_path = vim.fn.expand("~/code/dox/artix/home/.config/nvim/init.lua") - -if vim.api.nvim_buf_get_name(0) == neovim_config_path then - lua_ls_lib = vim.api.nvim_get_runtime_file("", true) -end - -vim.lsp.config("lua_ls", { - settings = { - Lua = { - workspace = { - library = lua_ls_lib - } - } - } -}) - --- do not enable jdtls here, we let the nvim-jdtls plugin do everything -vim.lsp.enable({ - "lua_ls", "cssls", "html", "jsonls", "clangd", "ts_ls", "nil", - "tinymist", "marksman", "lemminx", "rust_analyzer", "pyright" -}) - --- AUTOCMDS - -vim.api.nvim_create_autocmd("TextYankPost", { - callback = function() vim.hl.on_yank() end -}) - -vim.api.nvim_create_autocmd("BufWritePost", { - pattern = "*.tex", - callback = function() vim.cmd [[! pdflatex % ]] end -}) - -vim.api.nvim_create_autocmd("FileType", { - pattern = "java", - callback = function(args) - local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") - local workspace_dir = vim.fn.stdpath("data") - .. package.config:sub(1, 1) - .. "jdtls-workspace" - .. package.config:sub(1, 1) - .. project_name - - local config = { - name = "jdtls", - cmd = { - "jdtls", - "-data", - workspace_dir, - }, - root_dir = vim.fs.root(0, { ".git", "meta", "gradlew", "mvnw" }), - settings = { java = {} }, - init_options = { bundles = {} }, - } - require('jdtls').start_or_attach(config) - end -}) diff --git a/nixos/config/rofi/config.rasi b/nixos/config/rofi/config.rasi deleted file mode 100644 index 03a46e6..0000000 --- a/nixos/config/rofi/config.rasi +++ /dev/null @@ -1,27 +0,0 @@ -@theme "tokyonight.rasi" - -configuration { - modes: "window,drun,run,ssh"; - font: "monospace 18"; - show-icons: true; - terminal: "alacritty"; - ssh-client: "ssh"; - disable-history: true; - sort: true; - sorting-method: "normal"; - case-sensitive: false; - case-smart: false; - cycle: true; - sidebar-mode: false; - hover-select: true; - - timeout { - action: "kb-cancel"; - delay: 0; - } - - filebrowser { - directories-first: true; - sorting-method: "name"; - } -} diff --git a/nixos/config/rofi/tokyonight.rasi b/nixos/config/rofi/tokyonight.rasi deleted file mode 100644 index 2f322fc..0000000 --- a/nixos/config/rofi/tokyonight.rasi +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * ROFI Color theme - * User: Lairizzle - * Copyright: Lairizzle - * GitHub: https://github.com/Lairizzle/rofi-tokyonight - ********************************************************************************/ - -* { - selected-normal-foreground: rgba(125, 207, 255, 1); /* blue highlight */ - foreground: rgba(224, 234, 252, 1); /* bright */ - normal-foreground: @foreground; - alternate-normal-background: rgba(36, 40, 59, 1); /* #24283b */ - red: rgba(247, 118, 142, 1); /* #f7768e */ - selected-urgent-foreground: rgba(125, 207, 255, 1); /* bright blue */ - blue: rgba(125, 207, 255, 1); /* #7dcfff */ - urgent-foreground: rgba(247, 118, 142, 1); /* #f7768e */ - alternate-urgent-background: rgba(36, 40, 59, 1); /* #24283b */ - active-foreground: rgba(125, 207, 255, 1); /* blue */ - lightbg: rgba(217, 222, 239, 1); - selected-active-foreground: rgba(125, 207, 255, 1); - alternate-active-background: rgba(36, 40, 59, 1); - background: rgba(26, 27, 38, 0.93); /* #1a1b26 */ - bordercolor: rgba(125, 207, 255, 1); /* #7dcfff */ - alternate-normal-foreground: @foreground; - normal-background: rgba(36, 40, 59, 0.06); - lightfg: rgba(200, 210, 255, 1); /* bright dim text */ - selected-normal-background: rgba(65, 72, 104, 1); /* #414868 */ - border-color: @bordercolor; - spacing: 2; - separatorcolor: rgba(65, 72, 104, 1); - urgent-background: rgba(26, 27, 38, 1); /* #1a1b26 */ - selected-urgent-background: rgba(247, 118, 142, 1); - alternate-urgent-foreground: @urgent-foreground; - background-color: rgba(0, 0, 0, 0); - alternate-active-foreground: @active-foreground; - active-background: rgba(26, 27, 38, 1); - selected-active-background: rgba(65, 72, 104, 1); /* #414868 */ -} - -window { - background-color: @background; - border: 2; - border-radius: 8px; - padding: 5; - width: 50%; - height: 50%; -} -mainbox { - border: 0; - padding: 0; -} -message { - border: 2px 0px 0px ; - border-color: @separatorcolor; - padding: 1px ; -} -textbox { - text-color: @foreground; -} -listview { - fixed-height: 0; - border: 2px 0px 0px ; - border-color: @separatorcolor; - spacing: 2px ; - scrollbar: true; - padding: 2px 0px 0px ; -} -element { - border: 0; - padding: 1px ; -} -element-text { - background-color: inherit; - text-color: inherit; -} -element.normal.normal { - background-color: @normal-background; - text-color: @normal-foreground; -} -element.normal.urgent { - background-color: @urgent-background; - text-color: @urgent-foreground; -} -element.normal.active { - background-color: @active-background; - text-color: @active-foreground; -} -element.selected.normal { - background-color: @selected-normal-background; - text-color: @selected-normal-foreground; -} -element.selected.urgent { - background-color: @selected-urgent-background; - text-color: @selected-urgent-foreground; -} -element.selected.active { - background-color: @selected-active-background; - text-color: @selected-active-foreground; -} -element.alternate.normal { - background-color: @alternate-normal-background; - text-color: @alternate-normal-foreground; -} -element.alternate.urgent { - background-color: @alternate-urgent-background; - text-color: @alternate-urgent-foreground; -} -element.alternate.active { - background-color: @alternate-active-background; - text-color: @alternate-active-foreground; -} -scrollbar { - width: 4px ; - border: 0; - handle-width: 8px ; - padding: 0; -} -mode-switcher { - border: 2px 0px 0px ; - border-color: @separatorcolor; -} -button.selected { - background-color: @selected-normal-background; - text-color: @selected-normal-foreground; -} -inputbar { - spacing: 0; - text-color: @normal-foreground; - padding: 1px ; -} -case-indicator { - spacing: 0; - text-color: @normal-foreground; -} -entry { - spacing: 0; - text-color: @normal-foreground; -} -prompt { - spacing: 0; - text-color: @normal-foreground; -} -inputbar { - children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; -} -textbox-prompt-colon { - expand: false; - str: ":"; - margin: 0px 0.3em 0em 0em ; - text-color: @normal-foreground; -} -scrollbar { - width: 4px; - border: 0; - handle-width: 8px; - padding: 0; - handle-color: rgba(125, 207, 255, 0.8); /* bright blue scrollbar handle */ -} diff --git a/nixos/config/user-dirs.dirs b/nixos/config/user-dirs.dirs deleted file mode 100644 index 54d6c75..0000000 --- a/nixos/config/user-dirs.dirs +++ /dev/null @@ -1,8 +0,0 @@ -XDG_DESKTOP_DIR="$HOME/desktop" -XDG_DOWNLOAD_DIR="$HOME/dl" -XDG_TEMPLATES_DIR="$HOME/templates" -XDG_PUBLICSHARE_DIR="$HOME/public" -XDG_DOCUMENTS_DIR="$HOME/code" -XDG_MUSIC_DIR="$HOME/music" -XDG_PICTURES_DIR="$HOME/images" -XDG_VIDEOS_DIR="$HOME/videos" diff --git a/nixos/config/waybar/config.jsonc b/nixos/config/waybar/config.jsonc deleted file mode 100644 index 0ad4860..0000000 --- a/nixos/config/waybar/config.jsonc +++ /dev/null @@ -1,78 +0,0 @@ -{ - "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, - "seperate-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" - } -} diff --git a/nixos/config/waybar/style.css b/nixos/config/waybar/style.css deleted file mode 100644 index c17a100..0000000 --- a/nixos/config/waybar/style.css +++ /dev/null @@ -1,105 +0,0 @@ -@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; -} diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 19ee914..ec28c7d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -18,6 +18,8 @@ i18n.defaultLocale = "fr_FR.UTF-8"; + environment.pathsToLink = [ "/share/applications" "/share/xdg-desktop-portal" ]; + console = { font = "Lat2-Terminus16"; keyMap = "fr"; @@ -37,11 +39,6 @@ #services.getty.autologinUser = "nantha"; - programs.hyprland = { - enable = true; - xwayland.enable = true; - }; - users.users.nantha = { isNormalUser = true; extraGroups = [ "wheel" ]; @@ -49,23 +46,22 @@ }; environment.systemPackages = with pkgs; [ - brightnessctl - xdg-user-dirs - alsa-utils - alsa-tools - bibata-cursors + brightnessctl + alsa-utils + alsa-tools + bibata-cursors ]; hardware.firmware = with pkgs; [ - linux-firmware - sof-firmware - alsa-firmware + linux-firmware + sof-firmware + alsa-firmware ]; fonts = { enableDefaultPackages = true; packages = with pkgs; [ - nerd-fonts._0xproto + nerd-fonts._0xproto ]; }; 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; + }; } |
