diff options
Diffstat (limited to 'home/rices/nord-blue')
| -rw-r--r-- | home/rices/nord-blue/alacritty.nix | 13 | ||||
| -rw-r--r-- | home/rices/nord-blue/default.nix | 13 | ||||
| -rw-r--r-- | home/rices/nord-blue/fastfetch.nix | 24 | ||||
| -rw-r--r-- | home/rices/nord-blue/helix.nix | 171 | ||||
| -rw-r--r-- | home/rices/nord-blue/i3.nix | 107 | ||||
| -rw-r--r-- | home/rices/nord-blue/nvim.nix | 279 | ||||
| -rw-r--r-- | home/rices/nord-blue/picom.nix | 54 | ||||
| -rw-r--r-- | home/rices/nord-blue/variables.nix | 10 | ||||
| -rw-r--r-- | home/rices/nord-blue/wallpapers/wave-minimal.png | bin | 0 -> 352335 bytes |
9 files changed, 671 insertions, 0 deletions
diff --git a/home/rices/nord-blue/alacritty.nix b/home/rices/nord-blue/alacritty.nix new file mode 100644 index 0000000..772718c --- /dev/null +++ b/home/rices/nord-blue/alacritty.nix @@ -0,0 +1,13 @@ +{ + pkgs, + lib, + ... +}: { + # Let Stylix handle Alacritty theming + # Only override font size if needed + programs.alacritty.settings.font.size = lib.mkForce 10; + + home.packages = with pkgs; [ + nerd-fonts.jetbrains-mono + ]; +} diff --git a/home/rices/nord-blue/default.nix b/home/rices/nord-blue/default.nix new file mode 100644 index 0000000..1eb5514 --- /dev/null +++ b/home/rices/nord-blue/default.nix @@ -0,0 +1,13 @@ +{...}: { + imports = [ + ./alacritty.nix + ./i3.nix + ./nvim.nix + ./helix.nix + ./picom.nix + ./fastfetch.nix + ]; + + # Rice is purely home-manager level + # Desktop environment (X server, i3wm) is set in system/desktop.nix +} diff --git a/home/rices/nord-blue/fastfetch.nix b/home/rices/nord-blue/fastfetch.nix new file mode 100644 index 0000000..700ae80 --- /dev/null +++ b/home/rices/nord-blue/fastfetch.nix @@ -0,0 +1,24 @@ +{...}: { + programs.fastfetch = { + enable = true; + settings = { + logo = { + type = "builtin"; + source = "nixos_small"; + }; + display.separator = " "; + modules = [ + "title" + "os" + "kernel" + "uptime" + "packages" + "shell" + "terminal" + "cpu" + "memory" + "disk" + ]; + }; + }; +} diff --git a/home/rices/nord-blue/helix.nix b/home/rices/nord-blue/helix.nix new file mode 100644 index 0000000..eb893ee --- /dev/null +++ b/home/rices/nord-blue/helix.nix @@ -0,0 +1,171 @@ +{ + pkgs, + lib, + ... +}: { + programs.helix = { + enable = true; + defaultEditor = false; + settings = { + # Let Stylix handle theming + editor = { + cursor-shape = { + normal = "block"; + insert = "bar"; + select = "underline"; + }; + line-number = "relative"; + bufferline = "multiple"; + color-modes = true; + cursorline = true; + auto-save = { + after-delay.enable = true; + after-delay.timeout = 10000; + }; + auto-format = true; + end-of-line-diagnostics = "hint"; + inline-diagnostics.cursor-line = "hint"; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + popup-border = "popup"; + statusline.left = [ + "mode" + "spinner" + "spacer" + "version-control" + "file-name" + "diagnostics" + "read-only-indicator" + "file-modification-indicator" + "spacer" + ]; + statusline.right = [ + "workspace-diagnostics" + "register" + "position" + "selections" + "file-encoding" + "file-type" + ]; + idle-timeout = 50; + completion-timeout = 100; + indent-guides = { + render = true; + character = "|"; + skip-levels = 3; + }; + soft-wrap.enable = true; + whitespace = { + render = { + space = "none"; + tab = "all"; + newline = "none"; + }; + characters = { + nbsp = "·"; + tab = "→"; + }; + }; + }; + }; + languages = { + language-server = { + "bash-language-server" = { + command = "${pkgs.bash-language-server}/bin/bash-language-server"; + args = ["start"]; + }; + "superhtml" = { + command = "${pkgs.superhtml}/bin/superhtml"; + }; + "vscode-css-languageserver" = { + command = "${pkgs.vscode-css-languageserver}/bin/vscode-css-languageserver"; + }; + "rust-analyzer" = { + command = "${pkgs.rust-analyzer}/bin/rust-analyzer"; + }; + "pyright" = { + command = "${pkgs.pyright}/bin/pyright"; + }; + "nil" = { + command = "${pkgs.nil}/bin/nil"; + }; + "texlab" = { + command = "${pkgs.texlab}/bin/texlab"; + }; + texlab.config.texlab = { + build = { + onSave = true; + forwardSearchAfter = true; + }; + chktext.onEdit = true; + forwardSearch = { + executable = "zathura"; + args = ["--synctex-forward" "%l:1:%f" "%p"]; + }; + }; + "marksman" = { + command = "${pkgs.marksman}/bin/marksman"; + }; + }; + language = [ + { + name = "bash"; + language-servers = ["bash-language-server"]; + auto-format = true; + } + { + name = "html"; + language-servers = ["superhtml"]; + auto-format = true; + } + { + name = "css"; + language-servers = ["vscode-css-languageserver"]; + auto-format = true; + } + { + name = "rust"; + language-servers = ["rust-analyzer"]; + auto-format = true; + } + { + name = "python"; + language-servers = ["pyright"]; + auto-format = true; + } + { + name = "nix"; + language-servers = ["nil"]; + auto-format = true; + } + { + name = "latex"; + language-servers = ["texlab"]; + auto-format = true; + } + { + name = "markdown"; + language-servers = ["marksman"]; + auto-format = true; + } + ]; + }; + }; + + home.packages = with pkgs; [ + zathura + ripgrep + fd + bash-language-server + superhtml + vscode-css-languageserver + rust-analyzer + llvmPackages_latest.lldb + pyright + nil + texlab + marksman + ]; +} diff --git a/home/rices/nord-blue/i3.nix b/home/rices/nord-blue/i3.nix new file mode 100644 index 0000000..b42f223 --- /dev/null +++ b/home/rices/nord-blue/i3.nix @@ -0,0 +1,107 @@ +{ + pkgs, + lib, + ... +}: let + vars = import ./variables.nix; + mod = "Mod4"; + + lock-screen = pkgs.writeShellScriptBin "lock-screen" '' + #!/usr/bin/env sh + set -eu + WALL="''${1:-$HOME/Pictures/wallpaper.png}" + TMP="/tmp/lockscreen.png" + RES=$(xrandr | awk '/\*/ {print $1; exit}') + magick "$WALL" -resize "''${RES}^" -gravity center -extent "$RES" "$TMP" + i3lock -i "$TMP" + ''; + + app-launcher = pkgs.writeShellScriptBin "app-launcher" '' + #!/usr/bin/env sh + BG='${vars.colors.background}' + FG='${vars.colors.foreground}' + ACCENT='${vars.colors.accent}' + TEXT='${vars.colors.text}' + dmenu_run -fn 'JetBrains Mono-12' -nb "$BG" -nf "$FG" -sb "$ACCENT" -sf "$TEXT" + ''; +in { + xsession.windowManager.i3 = { + enable = true; + config = { + modifier = mod; + bars = []; + + window = { + titlebar = false; + border = 3; + }; + + # Colors handled by Stylix + + startup = [ + {command = "sh -c 'feh --bg-scale ~/Pictures/wallpaper.png'";} + ]; + + keybindings = lib.mkOptionDefault { + "${mod}+Return" = "exec ${pkgs.alacritty}/bin/alacritty"; + "${mod}+d" = "exec ${app-launcher}/bin/app-launcher"; + "${mod}+m" = "exec ${app-launcher}/bin/app-launcher"; + "${mod}+Shift+m" = "exec alacritty -e nnn"; + "${mod}+n" = "exec firefox"; + "${mod}+q" = "kill"; + "${mod}+Ctrl+l" = "exec ${lock-screen}/bin/lock-screen"; + "${mod}+Shift+r" = "restart"; + "${mod}+Ctrl+Shift+e" = "exec sh -c 'i3-msg exit'"; + "${mod}+Shift+s" = "exec flameshot gui"; + + # Focus (vim bindings) + "${mod}+h" = "focus left"; + "${mod}+j" = "focus down"; + "${mod}+k" = "focus up"; + "${mod}+l" = "focus right"; + + # Focus (arrow keys) + "${mod}+Left" = "focus left"; + "${mod}+Down" = "focus down"; + "${mod}+Up" = "focus up"; + "${mod}+Right" = "focus right"; + + # Move (vim bindings) + "${mod}+Shift+h" = "move left"; + "${mod}+Shift+j" = "move down"; + "${mod}+Shift+k" = "move up"; + "${mod}+Shift+l" = "move right"; + + # Move (arrow keys) + "${mod}+Shift+Left" = "move left"; + "${mod}+Shift+Down" = "move down"; + "${mod}+Shift+Up" = "move up"; + "${mod}+Shift+Right" = "move right"; + + # Volume + "XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"; + "XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; + "XF86AudioMute" = "exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + "XF86AudioMicMute" = "exec wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; + + # Brightness + "XF86MonBrightnessUp" = "exec brightnessctl set 5%+"; + "XF86MonBrightnessDown" = "exec brightnessctl set 5%-"; + }; + }; + + extraConfig = '' + smart_borders on + ''; + }; + + home.packages = with pkgs; [ + dmenu + i3lock + imagemagick + polybar + alacritty + feh + nnn + ]; +} diff --git a/home/rices/nord-blue/nvim.nix b/home/rices/nord-blue/nvim.nix new file mode 100644 index 0000000..9677c57 --- /dev/null +++ b/home/rices/nord-blue/nvim.nix @@ -0,0 +1,279 @@ +{pkgs, ...}: { + home.packages = with pkgs; [ + zathura + ripgrep + fd + lazygit + stylua + alejandra + black + shfmt + + # Language servers + lua-language-server + nil + rust-analyzer + pyright + bash-language-server + texlab + ]; + + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + + plugins = with pkgs.vimPlugins; [ + # UI + catppuccin-nvim + nvim-web-devicons + which-key-nvim + gitsigns-nvim + + # Syntax + (nvim-treesitter.withPlugins (p: [ + p.lua + p.nix + p.rust + p.python + p.bash + p.latex + p.c + ])) + + # LSP + nvim-lspconfig + + # Completion / snippets + nvim-cmp + cmp-nvim-lsp + cmp_luasnip + luasnip + friendly-snippets + nvim-autopairs + + # Formatting + conform-nvim + comment-nvim + + # Navigation + telescope-nvim + plenary-nvim + nvim-tree-lua + + # Terminal + toggleterm-nvim + + # Writing + vimtex + orgmode + + # Start screen + { + plugin = vim-startify; + config = "let g:startify_change_to_vcs_root = 0"; + } + ]; + + extraLuaConfig = '' + ------------------------------------------------- + -- LEADER + ------------------------------------------------- + vim.g.mapleader = " " + + ------------------------------------------------- + -- BASIC OPTIONS + ------------------------------------------------- + vim.opt.number = true + vim.opt.relativenumber = true + vim.opt.clipboard = "unnamedplus" + vim.opt.showtabline = 2 + vim.o.timeout = true + vim.o.timeoutlen = 300 + + ------------------------------------------------- + -- THEME + ------------------------------------------------- + require("catppuccin").setup({ + flavour = "mocha", + }) + vim.cmd.colorscheme("catppuccin") + + ------------------------------------------------- + -- GITSIGNS + ------------------------------------------------- + require("gitsigns").setup() + + ------------------------------------------------- + -- TREESITTER + ------------------------------------------------- + require("nvim-treesitter.configs").setup({ + highlight = { enable = true }, + indent = { enable = true }, + }) + + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + vim.opt.foldenable = false + + ------------------------------------------------- + -- SNIPPETS + ------------------------------------------------- + require("luasnip.loaders.from_vscode").lazy_load() + + ------------------------------------------------- + -- COMPLETION + ------------------------------------------------- + local cmp = require("cmp") + local luasnip = require("luasnip") + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ["<C-Space>"] = cmp.mapping.complete(), + ["<CR>"] = cmp.mapping.confirm({ select = true }), + }), + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, + }) + + require("nvim-autopairs").setup({}) + + ------------------------------------------------- + -- LSP + ------------------------------------------------- + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local servers = { + "lua_ls", + "nil_ls", + "rust_analyzer", + "pyright", + "bashls", + "texlab", + } + + for _, server in ipairs(servers) do + vim.lsp.config(server, { + capabilities = capabilities + }) + vim.lsp.enable(server) + end + + ------------------------------------------------- + -- LSP KEYMAPS + ------------------------------------------------- + vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) + vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration) + vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) + vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references) + vim.keymap.set("n", "lh", vim.lsp.buf.hover) + vim.keymap.set("n", "ln", vim.lsp.buf.rename) + vim.keymap.set("n", "la", vim.lsp.buf.code_action) + vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end) + + ------------------------------------------------- + -- DIAGNOSTICS + ------------------------------------------------- + vim.keymap.set("n", "lj", vim.diagnostic.goto_next) + vim.keymap.set("n", "lk", vim.diagnostic.goto_prev) + vim.keymap.set("n", "le", vim.diagnostic.open_float) + + ------------------------------------------------- + -- FORMATTER + ------------------------------------------------- + require("conform").setup({ + format_on_save = { + timeout_ms = 500, + lsp_format = "fallback", + }, + formatters_by_ft = { + lua = { "stylua" }, + nix = { "alejandra" }, + rust = { "rustfmt" }, + python = { "black" }, + bash = { "shfmt" }, + }, + }) + + require("Comment").setup() + + ------------------------------------------------- + -- TELESCOPE + ------------------------------------------------- + local builtin = require("telescope.builtin") + + require("telescope").setup({ + defaults = { + layout_strategy = "horizontal", + sorting_strategy = "ascending", + file_ignore_patterns = { "node_modules", ".git/" }, + }, + }) + + vim.keymap.set("n", "<leader><leader>", builtin.find_files) + vim.keymap.set("n", "<leader>fg", builtin.live_grep) + vim.keymap.set("n", "<leader>fb", builtin.buffers) + + ------------------------------------------------- + -- WHICH KEY + ------------------------------------------------- + local wk = require("which-key") + wk.add({ + { "<leader>l", desc = "LSP" } + }) + + ------------------------------------------------- + -- NVIM TREE + ------------------------------------------------- + require("nvim-tree").setup({}) + vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>") + + ------------------------------------------------- + -- TERMINAL + ------------------------------------------------- + require("toggleterm").setup({ + direction = "float", + }) + + local Terminal = require("toggleterm.terminal").Terminal + + local lazygit = Terminal:new({ + cmd = "lazygit", + hidden = true, + direction = "float", + }) + + vim.keymap.set("n", "<leader>gg", function() + lazygit:toggle() + end) + + ------------------------------------------------- + -- ORGMODE + ------------------------------------------------- + local projects = { + "~/Documents/2_Writing/0_SOC/**/*.org", + "~/Documents/2_Writing/2_Notes/**/*.org", + "~/Documents/1_Projects/6_CRC-Altura/**/*.org", + "~/ORG/**/*.org" + } + + require("orgmode").setup({ + org_agenda_files = projects, + org_default_notes_file = "~/INBOX.org" + }) + + ------------------------------------------------- + -- VIMTEX + ------------------------------------------------- + vim.g.vimtex_view_method = "zathura" + ''; + }; +} diff --git a/home/rices/nord-blue/picom.nix b/home/rices/nord-blue/picom.nix new file mode 100644 index 0000000..06cf94a --- /dev/null +++ b/home/rices/nord-blue/picom.nix @@ -0,0 +1,54 @@ +{pkgs, ...}: { + services.picom = { + enable = true; + package = pkgs.picom-pijulius; + + settings = { + backend = "glx"; + vsync = true; + + # Opacity + inactive-opacity = 0.9; + active-opacity = 1.0; + + # Fading + fading = true; + fade-delta = 5; + fade-in-step = 0.09; + fade-out-step = 0.09; + + # Shadows + shadow = true; + shadow-radius = 15; + shadow-opacity = 0.5; + shadow-offset-x = 12; + shadow-offset-y = 12; + shadow-exclude = [ + "class_g = 'i3-frame'" + "window_type = 'dock'" + "window_type = 'desktop'" + "name = 'dmenu'" + "class_g = 'dmenu'" + ]; + + # Rounded corners + corner-radius = 15; + round-borders = 1; + rounded-corners-exclude = [ + "class_g = 'i3-frame'" + "window_type = 'dock'" + ]; + + # Animations + animations = true; + animation-stiffness = 25; + animation-dampening = 1; + animation-window-mass = 0.01; + animation-for-open-window = "zoom"; + animation-for-unmap-window = "slide-up"; + animation-for-transient-window = "zoom"; + animation-for-move-window = "slide"; + animation-for-resize-window = "stretch"; + }; + }; +} diff --git a/home/rices/nord-blue/variables.nix b/home/rices/nord-blue/variables.nix new file mode 100644 index 0000000..09268e3 --- /dev/null +++ b/home/rices/nord-blue/variables.nix @@ -0,0 +1,10 @@ +{ + colors = { + background = "#2D333F"; + accent = "#82A3C0"; + foreground = "#C6D0F5"; + text = "#D5A18E"; + }; + + wallpaper = "~/Pictures/wallpaper.png"; +} diff --git a/home/rices/nord-blue/wallpapers/wave-minimal.png b/home/rices/nord-blue/wallpapers/wave-minimal.png Binary files differnew file mode 100644 index 0000000..5d322d4 --- /dev/null +++ b/home/rices/nord-blue/wallpapers/wave-minimal.png |
