From 49b665abac9993b779acd6258aacc1838658e9d6 Mon Sep 17 00:00:00 2001 From: Roy Dumblauskas Date: Sat, 20 Jun 2026 16:37:18 -0500 Subject: [PATCH] copy laptop home configs --- nixos/flake.nix | 2 +- nixos/home-manager/home.nix | 84 +++++++ nixos/home-manager/programs/alacritty.nix | 23 ++ nixos/home-manager/programs/default.nix | 9 + nixos/home-manager/programs/firefox.nix | 187 ++++++++++++++++ nixos/home-manager/programs/fish.nix | 93 ++++++++ nixos/home-manager/programs/git.nix | 9 + nixos/home-manager/programs/nixvim.nix | 206 ++++++++++++++++++ .../instances/1.21.6/minecraft/options.txt | 148 +++++++++++++ .../instances/1.21.6/minecraft/servers.dat | Bin 0 -> 124 bytes nixos/roy-config/hypr/hyprland.lua | 193 ++++++++++++++++ .../hypr/scripts/focus-unfocused-monitor.sh | 3 + .../move-workspace-to-unfocused-monitor.sh | 3 + nixos/roy-config/waybar/config | 49 +++++ nixos/roy-config/waybar/style.css | 40 ++++ 15 files changed, 1048 insertions(+), 1 deletion(-) create mode 100755 nixos/home-manager/home.nix create mode 100644 nixos/home-manager/programs/alacritty.nix create mode 100644 nixos/home-manager/programs/default.nix create mode 100644 nixos/home-manager/programs/firefox.nix create mode 100644 nixos/home-manager/programs/fish.nix create mode 100644 nixos/home-manager/programs/git.nix create mode 100644 nixos/home-manager/programs/nixvim.nix create mode 100644 nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/options.txt create mode 100644 nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/servers.dat create mode 100644 nixos/roy-config/hypr/hyprland.lua create mode 100755 nixos/roy-config/hypr/scripts/focus-unfocused-monitor.sh create mode 100755 nixos/roy-config/hypr/scripts/move-workspace-to-unfocused-monitor.sh create mode 100755 nixos/roy-config/waybar/config create mode 100755 nixos/roy-config/waybar/style.css diff --git a/nixos/flake.nix b/nixos/flake.nix index 399944a..5eceb41 100755 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -92,7 +92,7 @@ { ... }: { imports = [ - ./home.nix + ./home-manager/home.nix nixvim.homeModules.nixvim sops-nix.homeManagerModules.sops ]; diff --git a/nixos/home-manager/home.nix b/nixos/home-manager/home.nix new file mode 100755 index 0000000..9aad3cd --- /dev/null +++ b/nixos/home-manager/home.nix @@ -0,0 +1,84 @@ +{ pkgs, ... }: + +{ + + # import longer service declarations + imports = [ + ./programs + ]; + + home.username = "roy"; + home.homeDirectory = "/home/roy"; + + home.packages = with pkgs; [ + age + awscli2 + dig + discord + ffmpeg_6 + fish + git + git-filter-repo + go + grim + jq + kdePackages.gwenview + minio-client + nodejs_22 + postman + prismlauncher + python3 + slurp + sops + spotify + ssh-to-age + tree + tmux + unzip + vlc + wl-clipboard + woeusb + wofi + xrandr + yq-go + zip + ]; + + # user program config files + home.file = { + ".config/hypr".source = ../roy-config/hypr; + ".config/waybar".source = ../roy-config/waybar; + ".local/share/PrismLauncher/instances/1.21.6/minecraft/options.txt".source = + ../roy-config/PrismLauncher/instances/1.21.6/minecraft/options.txt; + ".local/share/PrismLauncher/instances/1.21.6/minecraft/servers.dat".source = + ../roy-config/PrismLauncher/instances/1.21.6/minecraft/servers.dat; + }; + + # user persisted dirs + home.persistence."/persist" = { + directories = [ + ".ssh" + "rp" + "dl" + # persist steam + ".local/share/Steam" + # persist spotify + ".config/spotify" + ".cache/spotify" + ]; + files = [ + ".bash_history" + ".config/sops/age/keys.txt" + ".local/share/PrismLauncher/accounts.json" + ".local/share/PrismLauncher/instances/1.21.6/instance.cfg" + ".local/share/PrismLauncher/instances/1.21.6/mmc-pack.json" + ]; + }; + + # User services must come after sops secrets + systemd.user.services.mbsync.unitConfig.After = [ "sops-nix.service" ]; + + home.stateVersion = "24.11"; + programs.home-manager.enable = true; + +} diff --git a/nixos/home-manager/programs/alacritty.nix b/nixos/home-manager/programs/alacritty.nix new file mode 100644 index 0000000..516d859 --- /dev/null +++ b/nixos/home-manager/programs/alacritty.nix @@ -0,0 +1,23 @@ +{ ... }: { + programs.alacritty = { + enable = true; + theme = "catppuccin_frappe"; + + settings = { + terminal.shell = "fish"; + + font = { + normal.family = "UbuntuMono Nerd Font"; + italic.family = "UbuntuMono Nerd Font"; + bold.family = "UbuntuMono Nerd Font"; + size = 16; + }; + + window = { + decorations = "full"; + opacity = 1; + }; + }; + + }; +} diff --git a/nixos/home-manager/programs/default.nix b/nixos/home-manager/programs/default.nix new file mode 100644 index 0000000..69c3217 --- /dev/null +++ b/nixos/home-manager/programs/default.nix @@ -0,0 +1,9 @@ +{ ... }: { + imports = [ + ./alacritty.nix + ./firefox.nix + ./fish.nix + ./git.nix + ./nixvim.nix + ]; +} diff --git a/nixos/home-manager/programs/firefox.nix b/nixos/home-manager/programs/firefox.nix new file mode 100644 index 0000000..c516669 --- /dev/null +++ b/nixos/home-manager/programs/firefox.nix @@ -0,0 +1,187 @@ +{ + config, + inputs, + pkgs, + ... +}: +{ + # Configure firefox to be resilient against reboot + # Source = https://github.com/johnmpost/nixos-config + programs.firefox = { + enable = true; + + configPath = "${config.xdg.configHome}/mozilla/firefox"; + + profiles.roy = { + search = { + force = true; + default = "ddgc"; + privateDefault = "ddgc"; + engines = { + bing.metaData.hidden = true; + ddg.metaData.hidden = true; + google.metaData.hidden = true; + wikipedia.metaData.hidden = true; + amazon.metaData.hidden = true; + ebay.metaData.hidden = true; + ddgc = { + name = "DuckDuckGo (unthemed)"; + urls = [ { template = "https://duckduckgo.com/?q={searchTerms}"; } ]; + icon = "https://duckduckgo.com/favicon.ico"; + }; + }; + }; + + extensions.force = true; + extensions.packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [ + ublock-origin + vimium-c + ]; + extensions.settings."uBlock0@raymondhill.net".settings = { + selectedFilterLists = [ + "ublock-filters" + "ublock-badware" + "ublock-privacy" + "ublock-quick-fixes" + "ublock-unbreak" + "easylist-chat" + "easylist-newsletters" + "easylist-notifications" + "easylist-annoyances" + "adguard-mobile-app-banners" + "adguard-other-annoyances" + "adguard-popup-overlays" + "adguard-widgets" + "ublock-annoyances" + ]; + }; + + settings = { + # don't force manual enablement of extensions on first launch + "extensions.autoDisableScopes" = 0; + "browser.urlbar.shortcuts.bookmarks" = false; + "browser.urlbar.shortcuts.history" = false; + "browser.urlbar.shortcuts.tabs" = false; + "browser.aboutConfig.showWarning" = false; + "dom.security.https_only_mode" = true; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.pbmode.enabled" = true; + "privacy.donottrackheader.enabled" = true; + "signon.rememberSignons" = false; + "extensions.formautofill.creditCards.enabled" = false; + "extensions.formautofill.addresses.enabled" = false; + "browser.urlbar.suggest.quicksuggest.sponsored" = false; + # hide weather on new tab page + "browser.newtabpage.activity-stream.showWeather" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.toolbars.bookmarks.visibility" = "never"; + # set default download dir (to avoid Download dir creation) + "browser.download.dir" = "/home/roy/dl"; + "browser.download.useDownloadDir" = false; + "browser.download.folderList" = 2; + "full-screen-api.ignore-widgets" = true; + "browser.tabs.firefox-view" = false; + "browser.gesture.swipe.left" = ""; + "browser.gesture.swipe.right" = ""; + "pdfjs.sidebarViewOnLoad" = 0; + "identity.fxaccounts.enabled" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.uitour.enabled" = false; + "toolkit.telemetry.enabled" = false; + # don't show about:welcome or privacy page on first launch + "browser.aboutwelcome.enabled" = false; + "datareporting.policy.dataSubmissionPolicyBypassNotification" = true; + # disable pocket + "extensions.pocket.enabled" = false; + # keep window open when closing all tabs + "browser.tabs.closeWindowWithLastTab" = false; + # allegedly disable addon recommendations + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + # allegedly disable feature recommendations + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + # don't show "open previous tabs?" toolbar, hopefully still allow functionality + "browser.startup.couldRestoreSession.count" = -1; + }; + + bookmarks.force = true; + bookmarks.settings = [ + { + name = "google search"; + url = "https://www.google.com/search?q=%s"; + keyword = "g"; + } + { + name = "youtube search"; + url = "https://www.youtube.com/results?search_query=%s"; + keyword = "yt"; + } + { + name = "wikipedia search"; + url = "https://en.wikipedia.org/wiki/Special:Search?search=%s"; + keyword = "w"; + } + { + name = "dictionary search"; + url = "https://www.wordnik.com/words/%s"; + keyword = "d"; + } + { + name = "github go to repo"; + url = "https://github.com/RoyDumblauskas/%s"; + keyword = "repo"; + } + { + name = "chatgpt"; + url = "https://chatgpt.com"; + keyword = "chat"; + } + { + name = "github my repos"; + url = "https://github.com/RoyDumblauskas?tab=repositories"; + keyword = "repos"; + } + { + name = "github profile"; + url = "https://github.com/RoyDumblauskas"; + keyword = "gh"; + } + { + name = "drive 0"; + url = "https://drive.google.com/drive/u/0/folders/1hMAgupSZvhAml0K1WhBi9sNINfvkhw0e"; + keyword = "d0"; + } + { + name = "drive 1"; + url = "https://drive.google.com/drive/u/1"; + keyword = "d1"; + } + { + name = "mail 1"; + url = "https://mail.google.com/mail/u/1"; + keyword = "m1"; + } + { + name = "mail 0"; + url = "https://mail.google.com/mail/u/0"; + keyword = "m0"; + } + { + name = "discord"; + url = "https://discord.com/app"; + keyword = "dis"; + } + { + name = "downloads"; + url = "file:///home/roy/dl/%s"; + keyword = "dl"; + } + { + name = "nix package search"; + url = "https://search.nixos.org/packages?channel=unstable&query=%s"; + keyword = "nixp"; + } + ]; + }; + }; +} diff --git a/nixos/home-manager/programs/fish.nix b/nixos/home-manager/programs/fish.nix new file mode 100644 index 0000000..58f33ec --- /dev/null +++ b/nixos/home-manager/programs/fish.nix @@ -0,0 +1,93 @@ +{ ... }: { + programs.fish = { + enable = true; + + shellAliases = { + ga = "git add ."; + gc = "git commit -am"; + gp = "git push"; + gpl = "git pull"; + gpr = "git pull --rebase"; + gl = "git log"; + shypr = "start-hyprland"; + nixrb = "sudo nixos-rebuild switch --flake"; + }; + + functions = { + + fish_greeting = ""; + + fish_prompt = '' + set -l last_pipestatus $pipestatus + set -lx __fish_last_status $status # Export for __fish_print_pipestatus. + set -l normal (set_color normal) + set -q fish_color_status + or set -g fish_color_status red + + # Color the prompt differently when we're root + set -l color_cwd $fish_color_cwd + set -l suffix '>' + if functions -q fish_is_root_user; and fish_is_root_user + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root + end + set suffix '#' + end + + # Write pipestatus + # If the status was carried over (if no command is issued or if `set` leaves the status untouched), don't bold it. + set -l bold_flag --bold + set -q __fish_prompt_status_generation; or set -g __fish_prompt_status_generation $status_generation + if test $__fish_prompt_status_generation = $status_generation + set bold_flag + end + set __fish_prompt_status_generation $status_generation + set -l status_color (set_color $fish_color_status) + set -l statusb_color (set_color $bold_flag $fish_color_status) + set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) + + echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $suffix " " + ''; + + prompt_pwd = '' + set -l options h/help d/dir-length= D/full-length-dirs= + argparse -n prompt_pwd $options -- $argv + or return + + if set -q _flag_help + __fish_print_help prompt_pwd + return 0 + end + + set -q argv[1] + or set argv $PWD + + set -ql _flag_d + and set -l fish_prompt_pwd_dir_length $_flag_d + + set -q fish_prompt_pwd_dir_length + or set -l fish_prompt_pwd_dir_length 1 + + set -l fulldirs 0 + set -ql _flag_D + and set -l fish_prompt_pwd_full_dirs $_flag_D + + set -q fish_prompt_pwd_full_dirs + or set -l fish_prompt_pwd_full_dirs 1 + + for path in $argv + # Replace $HOME with "~" + set -l realhome (string escape --style=regex -- ~) + set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $path) + + set -l full + set -l all (string split -m (math $fish_prompt_pwd_full_dirs - 1) -r / $tmp) + set tmp $all[1] + set full $all[2..] + + string join / -- (string replace -ar -- '(\.?[^/]{'"100"'})[^/]*/' '$1/' $tmp) $full + end + ''; + }; + }; +} diff --git a/nixos/home-manager/programs/git.nix b/nixos/home-manager/programs/git.nix new file mode 100644 index 0000000..ec22a51 --- /dev/null +++ b/nixos/home-manager/programs/git.nix @@ -0,0 +1,9 @@ +{ ... }: { + programs.git = { + enable = true; + settings = { + user.name = "Roy Dumblauskas"; + user.email = "roydumblauskas@gmail.com"; + }; + }; +} diff --git a/nixos/home-manager/programs/nixvim.nix b/nixos/home-manager/programs/nixvim.nix new file mode 100644 index 0000000..084bbc8 --- /dev/null +++ b/nixos/home-manager/programs/nixvim.nix @@ -0,0 +1,206 @@ +{ ... }: { + # Configure nixvim + programs.nixvim = { + enable = true; + globals.mapleader = " "; + + opts = { + number = true; + shiftwidth = 2; + tabstop = 2; + expandtab = true; + }; + + clipboard.register = "unnamedplus"; + + keymaps = [ + { + action = "Neotree toggle"; + key = "b"; + mode = [ "n" ]; + options.silent = true; + options.desc = "Toggle Neotree"; + } + { + action = "h"; + key = "h"; + mode = [ "n" ]; + options.silent = true; + options.desc = "Focus left"; + } + { + action = "l"; + key = "l"; + mode = [ "n" ]; + options.silent = true; + options.desc = "Focus right"; + } + { + action = "j"; + key = "j"; + mode = [ "n" ]; + options.silent = true; + options.desc = "Focus down"; + } + { + action = "k"; + key = "k"; + mode = [ "n" ]; + options.silent = true; + options.desc = "Focus up"; + } + ]; + + plugins = { + lualine.enable = true; + lsp-lines.enable = true; + lsp-format.enable = true; + + lsp = { + enable = true; + inlayHints = true; + + servers = { + html.enable = true; + lua_ls.enable = true; + nil_ls.enable = true; + ts_ls.enable = true; + marksman.enable = true; + pyright.enable = true; + gopls.enable = true; + terraformls.enable = true; + jsonls.enable = true; + yamlls.enable = true; + + rust_analyzer = { + enable = true; + installRustc = true; + installCargo = true; + settings = { + cargo = { + features = "all"; + }; + }; + }; + }; + + keymaps = { + silent = true; + + lspBuf = { + gd = { + action = "definition"; + desc = "Goto Definition"; + }; + + gr = { + action = "references"; + desc = "Goto References"; + }; + + gD = { + action = "declaration"; + desc = "Goto Declaration"; + }; + + gI = { + action = "implementation"; + desc = "Goto Implementation"; + }; + + gT = { + action = "type_definition"; + desc = "Type Definition"; + }; + + K = { + action = "hover"; + desc = "Hover"; + }; + + "cw" = { + action = "workspace_symbol"; + desc = "Workspace Symbol"; + }; + + "r" = { + action = "rename"; + desc = "Rename"; + }; + }; + + diagnostic = { + "cd" = { + action = "open_float"; + desc = "Line Diagnostics"; + }; + + "]d" = { + action = "goto_next"; + desc = "Next Diagnostic"; + }; + + "[d" = { + action = "goto_prev"; + desc = "Previous Diagnostic"; + }; + }; + }; + }; + + neo-tree = { + enable = true; + }; + + # neo-tree dependency + web-devicons.enable = true; + + cmp = { + enable = true; + autoEnableSources = true; + settings = { + sources = [ + { name = "nvim_lsp"; } + { name = "path"; } + { name = "buffer"; } + { name = "luasnip"; } + ]; + mapping = { + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.scroll_docs(-4)"; + "" = "cmp.mapping.close()"; + "" = "cmp.mapping.scroll_docs(4)"; + "" = "cmp.mapping.confirm({ select = true })"; + "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; + "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + }; + }; + }; + }; + extraConfigLua = '' + local _border = "rounded" + + vim.lsp.config('*', { + handlers = { + ["textDocument/hover"] = { + border = _border, + }, + ["textDocument/signatureHelp"] = { + border = _border, + }, + }, + }) + + vim.diagnostic.config({ + float = { + border = _border, + }, + }) + ''; + + colorschemes.catppuccin = { + enable = true; + settings.flavour = "frappe"; + }; + }; +} diff --git a/nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/options.txt b/nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/options.txt new file mode 100644 index 0000000..a5ba4f2 --- /dev/null +++ b/nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/options.txt @@ -0,0 +1,148 @@ +version:4435 +ao:true +biomeBlendRadius:2 +enableVsync:true +entityDistanceScaling:1.0 +entityShadows:false +forceUnicodeFont:false +japaneseGlyphVariants:false +fov:0.0 +fovEffectScale:1.0 +darknessEffectScale:1.0 +glintSpeed:0.5 +glintStrength:0.75 +prioritizeChunkUpdates:0 +fullscreen:true +gamma:1.0 +graphicsMode:0 +guiScale:0 +maxFps:120 +inactivityFpsLimit:"afk" +mipmapLevels:4 +narrator:0 +particles:1 +reducedDebugInfo:false +renderClouds:"false" +cloudRange:128 +renderDistance:12 +simulationDistance:12 +screenEffectScale:1.0 +soundDevice:"" +autoJump:false +rotateWithMinecart:false +operatorItemsTab:false +autoSuggestions:true +chatColors:true +chatLinks:true +chatLinksPrompt:true +discrete_mouse_scroll:false +invertYMouse:false +realmsNotifications:true +showSubtitles:false +directionalAudio:false +touchscreen:false +bobView:true +toggleCrouch:false +toggleSprint:false +darkMojangStudiosBackground:false +hideLightningFlashes:false +hideSplashTexts:false +mouseSensitivity:0.5 +damageTiltStrength:1.0 +highContrast:false +highContrastBlockOutline:false +narratorHotkey:true +resourcePacks:[] +incompatibleResourcePacks:[] +lastServer: +lang:en_us +chatVisibility:0 +chatOpacity:1.0 +chatLineSpacing:0.0 +textBackgroundOpacity:0.5 +backgroundForChatOnly:true +hideServerAddress:false +advancedItemTooltips:false +pauseOnLostFocus:true +overrideWidth:0 +overrideHeight:0 +chatHeightFocused:1.0 +chatDelay:0.0 +chatHeightUnfocused:0.4375 +chatScale:1.0 +chatWidth:1.0 +notificationDisplayTime:1.0 +useNativeTransport:true +mainHand:"right" +attackIndicator:1 +tutorialStep:none +mouseWheelSensitivity:1.0 +rawMouseInput:true +glDebugVerbosity:1 +skipMultiplayerWarning:true +hideMatchedNames:true +joinedFirstServer:true +syncChunkWrites:false +showAutosaveIndicator:true +allowServerListing:true +onlyShowSecureChat:false +panoramaScrollSpeed:1.0 +telemetryOptInExtra:false +onboardAccessibility:false +menuBackgroundBlurriness:5 +startedCleanly:true +showNowPlayingToast:false +musicFrequency:"DEFAULT" +key_key.attack:key.mouse.left +key_key.use:key.mouse.right +key_key.forward:key.keyboard.w +key_key.left:key.keyboard.a +key_key.back:key.keyboard.s +key_key.right:key.keyboard.d +key_key.jump:key.keyboard.space +key_key.sneak:key.keyboard.left.shift +key_key.sprint:key.keyboard.left.control +key_key.drop:key.keyboard.q +key_key.inventory:key.keyboard.e +key_key.chat:key.keyboard.t +key_key.playerlist:key.keyboard.tab +key_key.pickItem:key.mouse.middle +key_key.command:key.keyboard.slash +key_key.socialInteractions:key.keyboard.p +key_key.screenshot:key.keyboard.f2 +key_key.togglePerspective:key.keyboard.f5 +key_key.smoothCamera:key.keyboard.unknown +key_key.fullscreen:key.keyboard.f11 +key_key.spectatorOutlines:key.keyboard.unknown +key_key.swapOffhand:key.keyboard.f +key_key.saveToolbarActivator:key.keyboard.c +key_key.loadToolbarActivator:key.keyboard.x +key_key.advancements:key.keyboard.l +key_key.quickActions:key.keyboard.g +key_key.hotbar.1:key.keyboard.1 +key_key.hotbar.2:key.keyboard.2 +key_key.hotbar.3:key.keyboard.3 +key_key.hotbar.4:key.keyboard.4 +key_key.hotbar.5:key.keyboard.5 +key_key.hotbar.6:key.keyboard.6 +key_key.hotbar.7:key.keyboard.7 +key_key.hotbar.8:key.keyboard.8 +key_key.hotbar.9:key.keyboard.9 +soundCategory_master:1.0 +soundCategory_music:1.0 +soundCategory_record:1.0 +soundCategory_weather:1.0 +soundCategory_block:1.0 +soundCategory_hostile:1.0 +soundCategory_neutral:0.3063380280378419 +soundCategory_player:1.0 +soundCategory_ambient:1.0 +soundCategory_voice:1.0 +soundCategory_ui:1.0 +modelPart_cape:true +modelPart_jacket:true +modelPart_left_sleeve:true +modelPart_right_sleeve:true +modelPart_left_pants_leg:true +modelPart_right_pants_leg:true +modelPart_hat:true diff --git a/nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/servers.dat b/nixos/roy-config/PrismLauncher/instances/1.21.6/minecraft/servers.dat new file mode 100644 index 0000000000000000000000000000000000000000..f75b0397897199be10cc59f4f3aa31860de78586 GIT binary patch literal 124 zcmd;LVBln6FHS8gOD!tqVqjokVq{>;$V^E|&12wTV9G3D5HK{*13^OzBP$bQ0|NsN n29~_U+*Ag>kksOm%)E4kV6bimbd6jHjW8|T9{IVcF!c-oX1g2w literal 0 HcmV?d00001 diff --git a/nixos/roy-config/hypr/hyprland.lua b/nixos/roy-config/hypr/hyprland.lua new file mode 100644 index 0000000..fa3c3a2 --- /dev/null +++ b/nixos/roy-config/hypr/hyprland.lua @@ -0,0 +1,193 @@ +-- Import files +-- require("relative.path") + +-- monitors +hl.monitor({ + output = "", + mode = "preferred", + position = "auto", + scale = 1 +}) + +hl.monitor({ + output = "DP-1", + mode = "3840x2160@60", + position = "auto", + scale = 1.5 +}) + +hl.monitor({ + output = "HDMI-A-1", + mode = "2560x1440@59.95", + position = "auto-left", + scale = 1 +}) + +-- variables +local terminal = "alacritty" +local fileManager = "dolphin" +local menu = "wofi --show=drun --prompt='Search Programs'" + +-- on start +hl.on("hyprland.start", function() + hl.exec_cmd("waybar") + hl.exec_cmd(terminal) +end) + +-- env vars +hl.env("HYPRCURSOR_THEME", "rose-pine-hyprcursor") +hl.env("HYPRCURSOR_SIZE", "18") + +-- look and feel +hl.config({ + general = { + gaps_in = 0, + gaps_out = 0, + + border_size = 1, + + col = { + active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 }, + inactive_border = "rgba(595959aa)" + }, + + resize_on_border = false, + allow_tearing = false, + layout = "dwindle" + }, + + decoration = { + rounding = 0, + + active_opacity = 1.0, + inactive_opacity = 1.0, + + shadow = { enabled = false }, + blur = { enabled = false } + }, + + animations = { + enabled = false + } +}) + +-- dwindle +hl.config({ + dwindle = { + preserve_split = true + } +}) + +-- master +hl.config({ + master = { + new_status = "master", + }, +}) + +-- misc +hl.config({ + misc = { + force_default_wallpaper = 0, + disable_hyprland_logo = true, + disable_splash_rendering = true + } +}) + +-- input +hl.config({ + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "", + kb_options = "", + kb_rules = "", + + follow_mouse = 1, + sensitivity = 0, + + touchpad = { + natural_scroll = false + } + } +}) + +-- keybinds +local mainMod = "SUPER" + +hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(terminal)) +hl.bind(mainMod .. " + SHIFT + Return", hl.dsp.exec_cmd("firefox")) +hl.bind(mainMod .. " + Q", hl.dsp.window.close()) +hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager)) +hl.bind(mainMod .. " + Space", hl.dsp.exec_cmd(menu)) +hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) +hl.bind(mainMod .. " + T", 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()'")) + +-- move focus +hl.bind(mainMod .. " + h", hl.dsp.focus({ direction = "left" })) +hl.bind(mainMod .. " + j", hl.dsp.focus({ direction = "down" })) +hl.bind(mainMod .. " + k", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. " + l", hl.dsp.focus({ direction = "right" })) + +-- switch/move workspaces +for i = 1, 10 do + local key = i % 10 + hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i })) + hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i })) +end + +-- focus on unfocused monitor (2 monitors only) +hl.bind(mainMod .. " + TAB", hl.dsp.exec_cmd("~/.config/hypr/scripts/focus-unfocused-monitor.sh")) + +-- move workspace to unfocused monitor (two monitors only) +hl.bind(mainMod .. " + SHIFT + TAB", hl.dsp.exec_cmd("~/.config/hypr/scripts/move-workspace-to-unfocused-monitor.sh")) + +-- screenshot +hl.bind(mainMod .. " + SHIFT + s", + hl.dsp.exec_cmd('grim -g "$(slurp -d)" - | tee /home/$USER/dl/$(date +"%F_%T").png | wl-copy')) + +-- fullscreen +hl.bind(mainMod .. " + SHIFT + f", hl.dsp.window.fullscreen({ action = "toggle" })) + +-- Scroll through existing workspaces with mainMod + scroll +hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" })) + +-- Move/resize windows with mainMod + LMB/RMB and dragging +hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- Laptop multimedia keys for volume and LCD brightness +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 }) + +-- Requires playerctl +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 }) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + name = "fix-xwayland-drags", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + + no_focus = true, +}) diff --git a/nixos/roy-config/hypr/scripts/focus-unfocused-monitor.sh b/nixos/roy-config/hypr/scripts/focus-unfocused-monitor.sh new file mode 100755 index 0000000..19dcaf6 --- /dev/null +++ b/nixos/roy-config/hypr/scripts/focus-unfocused-monitor.sh @@ -0,0 +1,3 @@ +#!/bin/sh +toMonitor=$(hyprctl monitors -j | jq -r 'first(.[] | select(.focused == false) | .name)') +hyprctl dispatch "hl.dsp.focus({ monitor = '$toMonitor' })" diff --git a/nixos/roy-config/hypr/scripts/move-workspace-to-unfocused-monitor.sh b/nixos/roy-config/hypr/scripts/move-workspace-to-unfocused-monitor.sh new file mode 100755 index 0000000..2fd83be --- /dev/null +++ b/nixos/roy-config/hypr/scripts/move-workspace-to-unfocused-monitor.sh @@ -0,0 +1,3 @@ +#!/bin/sh +toMonitor=$(hyprctl monitors -j | jq -r 'first(.[] | select(.focused == false) | .name)') +hyprctl dispatch "hl.dsp.workspace.move({ monitor = '$toMonitor' })" diff --git a/nixos/roy-config/waybar/config b/nixos/roy-config/waybar/config new file mode 100755 index 0000000..85e7e59 --- /dev/null +++ b/nixos/roy-config/waybar/config @@ -0,0 +1,49 @@ +{ + "layer": "top", + "position": "top", + "height": 26, + "spacing": 3, + + "modules-left": ["hyprland/workspaces"], + "modules-center": ["clock"], + "modules-right": ["wireplumber", "group/bat", "group/net"], + + "group/bat": { + "orientation": "horizontal", + "modules": ["battery"] + }, + "group/net": { + "orientation": "horizontal", + "modules": ["network"] + }, + "hyprland/workspaces": { + "format": "{name}", + "sort-by-number": true, + "persistent-workspaces": {} + }, + "clock": { + "format": "{:%d.%m.%Y | %H:%M:%S}", + "interval": 1 + }, + "wireplumber": { + "format": "\udb81\udd7e {volume}%", + "max-volume": 100, + "scroll-step": 5 + }, + "battery": { + "bat": "BAT0", + "interval": 60, + "format": "{icon} {capacity}%", + "format-icons": ["\uf244", "\uf243", "\uf242", "\uf241", "\uf240"], + }, + "network": { + "format": "", + "format-ethernet": "\udb83\udc9d ", + "format-wifi": "{icon} ", + "format-disconnected": "\udb83\udc9c ", + "format-icons": ["\udb82\udd2f", "\udb82\udd1f", "\udb82\udd22", "\udb82\udd25", "\udb82\udd28"], + "tooltip-format-wifi": "{essid} ({signalStrength}%)", + "tooltip-format-ethernet": "{ifname}", + "tooltip-format-disconnected": "Disconnected", + } +} diff --git a/nixos/roy-config/waybar/style.css b/nixos/roy-config/waybar/style.css new file mode 100755 index 0000000..d104e75 --- /dev/null +++ b/nixos/roy-config/waybar/style.css @@ -0,0 +1,40 @@ +@define-color foreground #eff0f1; +@define-color foreground-inactive #7f8c8d; +@define-color background #232629; +@define-color background-alt #31363b; + +* { + font-family: UbuntuMono Nerd Font; + font-size: 16px; + padding: 0; + margin: 0; +} + +#waybar { + color: @foreground; + background-color: @background; +} + +#workspaces button { + color: @foreground-inactive; + padding-left: 2px; + padding-right: 2px; +} + +#workspaces button.active { + color: @foreground; + background-color: @background-alt; + border-radius: 2px; +} + +#wireplumber, +#bat, +#net { + background-color: @background-alt; + border-radius: 3px; + padding-left: 0.5em; + padding-right: 0.5em; +} + +#battery, +#network {}