From 4dd42aa53095f50f5d4c8f32566c427a0b914087 Mon Sep 17 00:00:00 2001 From: Leon Wilzer Date: Wed, 27 Nov 2024 10:16:50 +0100 Subject: [PATCH] refactor: moved everything to home manager --- flake.lock | 48 +++ flake.nix | 29 ++ home.nix | 955 ++++++++++++++++++++++++++++++++++++++++++++++++++--- hypr.nix | 80 +++++ theme.nix | 43 +++ 5 files changed, 1116 insertions(+), 39 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 hypr.nix create mode 100644 theme.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9ba97ae --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732482255, + "narHash": "sha256-GUffLwzawz5WRVfWaWCg78n/HrBJrOG7QadFY6rtV8A=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "a9953635d7f34e7358d5189751110f87e3ac17da", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..58065f8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + description = "NixOS configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + }; + + outputs = inputs@{ nixpkgs, home-manager, ... }: { + nixosConfigurations = { + hostname = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.leon = import ./home.nix; + + # Optionally, use home-manager.extraSpecialArgs to pass + # arguments to home.nix + } + ]; + }; + }; + }; +} diff --git a/home.nix b/home.nix index f21e105..5d2664b 100644 --- a/home.nix +++ b/home.nix @@ -1,58 +1,903 @@ { config, pkgs, ... }: let - homeDir = "/home/leon"; + username = "leon"; + homeDir = "/home/${username}"; in { + #imports = + #[ + # ./hypr.nix + #]; # Home Manager needs a bit of information about you and the # paths it should manage. - home.username = "leon"; + home.username = username; home.homeDirectory = homeDir; + xdg.mimeApps = { + enable = true; + + defaultApplications = { + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + "x-scheme-handler/about" = "firefox.desktop"; + "x-scheme-handler/unknown" = "firefox.desktop"; + "application/pdf" = "org.pwmt.zathura-ps.desktop"; + "x-scheme-handler/mailto" = "userapp-Thunderbird-3NBJQ2.desktop"; + "x-scheme-handler/mid" = "userapp-Thunderbird-3NBJQ2.desktop"; + "x-scheme-handler/news" = "userapp-Thunderbird-QJOCQ2.desktop"; + "x-scheme-handler/snews" = "userapp-Thunderbird-QJOCQ2.desktop"; + "x-scheme-handler/nntp" = "userapp-Thunderbird-QJOCQ2.desktop"; + "x-scheme-handler/feed" = "userapp-Thunderbird-EIXEQ2.desktop"; + "application/rss+xml" = "userapp-Thunderbird-EIXEQ2.desktop"; + "application/x-extension-rss" = "userapp-Thunderbird-EIXEQ2.desktop"; + "x-scheme-handler/webcal" = "userapp-Thunderbird-LBFEQ2.desktop"; + "x-scheme-handler/webcals" = "userapp-Thunderbird-LBFEQ2.desktop"; + + "message/rfc822" = "userapp-Thunderbird-3NBJQ2.desktop"; + "text/calendar" = "userapp-Thunderbird-LBFEQ2.desktop"; + "application/x-extension-ics" = "userapp-Thunderbird-LBFEQ2.desktop"; + "application/x-bittorrent;x-scheme-handler/magnet" = "transmission-remote-gtk.desktop"; + }; + }; + + # Allow unfree packages (crying FSF noises) + nixpkgs.config.allowUnfree = true; + nixpkgs.config.packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; # Packages that should be installed to the user profile. home.packages = with pkgs; [ - prismlauncher # Minecraft - element-desktop # Matrix Desktop Client - tidal-hifi # Tidal Web Client - helvum # pipewire patchbay + prismlauncher # Minecraft + element-desktop # Matrix Desktop Client + tidal-hifi # Tidal Web Client + helvum # pipewire patchbay + bitwarden-cli # password and secret manager + ansible # declarative server managment + packwiz # Minecraft mod pack managment + just # A handy way to save and run project-specific commands + ydotool # wayland automation tool + lunarvim # IDE layer for Neovim + cloudflared # cloudflare things + + sbctl # For debugging and troubleshooting Secure Boot + killall # killall + dmenu # (program) picker for Xorg + xorg.xauth # Dependency of startx (??) + wl-clipboard # Wayland clipboard functionality + bottom # htop, but in Rust and better + tree # tree + fzf # Fuzzy Find + pwvucontrol # pipewire volume control + brave # Chromium based fallback browser + qalculate-gtk # Best calculator ever + #home-manager # Nix's Home-Manager + catppuccin-cursors.mochaDark # Catppuccin Mouse Cursors + wofi # dmenu, but for wlroots wayland + kitty # kitty terminal emulator + waybar # Status bar for wayland compositors + grim # screenshot tool + playerctl # Media control + slurp # selection tool + mako # Notification Daemon + nmap # port scanning tool + libreoffice-qt # Office Suite + hunspell # Spellchecking + hunspellDicts.de_DE # German Spellcheck + hunspellDicts.en_US # English Spellcheck + shellcheck # Shell linter + jq # JSON utility + texlive.combined.scheme-full # LaTeX + zathura # minimal PDF Viewer + gimp # gnu image manipulation program + p7zip # (7)zip tool + zip # standard unix zip tool + thunderbird # E-Mail & Calendar + signal-desktop # Signal Desktop Client + lazygit # Terminal git frontend + mpv # Video Playback + vlc # media playback + imv # minimal image viewer + celluloid # mpv frontend + mumble # FOSS Steam Speak + easyeffects # some audio effects + hypridle # idle daemon for hyprland + hyprpaper # Hyprpland backgrounds + brightnessctl # brightness control cli + rustc # rust compiler + rust-analyzer # Rust LSP + cargo # rust build tool + gcc # GNU Compiler Collections + clang-tools # LSP Server + formatter + nodePackages.vscode-json-languageserver # ZED Json LSP + ddcutil # Screen controls + wireguard-tools # Wireguard + man-pages # dev man pages + man-pages-posix # dev man pages + #(catppuccin-sddm.override { + # flavor = "mocha"; + # font = "Fira Sans"; + # fontSize = "9"; + # backgroundbin = "$XDG_PICTURES_DIR/Wallpapers/current"; + # loginBackground = true; + #}) + steamcmd # steamcmd + wget # downloader + xclip # Clipboard + wine # win translator + protontricks # Managment of proton enabled games + lutris # Linux Game Manager + discord # !delete voip/messenger + brasero # Disc-Burner + cdrtools # CD tools + cdrdao # CD tools + dvdplusrwtools # DVD + Blu-ray tools + tidal-dl # Tidal ripper + vscodium-fhs # VS Code + niv # Nix dependency managment + bottles # WINE Prefix manager + transmission-remote-gtk # Torrent Client + qemu # Virtualization/Emulation + bash # Compat + jetbrains.idea-ultimate # IntelliJ Ultimate + jetbrains.idea-community # IntelliJ Community + maven # Java Build tool + jdk # Java development kit + nixfmt-rfc-style # official nix formatter ]; - programs.zsh.enable = true; - programs.bash.enable = true; + programs = { + zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + autocd = true; + shellAliases = { + git-list-untracked = ''git fetch --prune && git branch -r | awk "{print \$1}" | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk "{print \$1}"''; + git-remove-untracked = ''git fetch --prune && git branch -r | awk "{print \$1}" | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk "{print \$1}" | xargs git branch -d''; + }; + }; + bash.enable = true; + kitty = { + enable = true; + themeFile = "Catppuccin-Mocha"; + font = { + name = "Fira Code"; + package = pkgs.fira-code; + }; + settings = { + enable_audio_bell = false; + background_opacity = 0.85; + }; + }; - programs.git = - { - enable = true; - userName = "Leon Wilzer"; - userEmail = "git@komu.boo"; - aliases = { - ci = "commit"; - co = "checkout"; - s = "status"; - }; + git = { + enable = true; + userName = "Leon Wilzer"; + userEmail = "git@komu.boo"; + aliases = { + ci = "commit"; + co = "checkout"; + s = "status"; + undo = "reset --soft 'HEAD^'"; + a = "add"; + p = "push"; + cl = "clone"; + }; + signing = { + signByDefault = true; + key = "0x645EFCD19E59ED05"; + }; + extraConfig = { + push = { + autoSetupRemote = true; + }; + }; + }; + + gpg = { + enable = true; + }; + + ssh = + let + sshDir = "${homeDir}/.ssh"; + startAgent = true; + in + { + enable = true; + matchBlocks = { + "libre.moe *.libre.moe" = { + user = "leon"; + identityFile = "${sshDir}/libremoe"; + }; + "komu.boo *.komu.boo" = { + user = "root"; + identityFile = "${sshDir}/komuboo"; + }; + "uni-paderborn.de upb.de *.uni-paderborn.de *.upb.de" = { + user = "lwilzer"; + identityFile = "${sshDir}/unipaderborn"; + }; + }; + }; + + neovim = { + enable = true; + defaultEditor = true; + vimAlias = true; + viAlias = true; + extraConfig = '' + " General + set number + set relativenumber + set cc=120 + set tabstop=4 + set softtabstop=0 noexpandtab + set shiftwidth=4 + colorscheme catppuccin-mocha + + " VimTex + filetype plugin indent on + syntax enable + let g:vimtex_view_method = 'zathura' + + " Vim-LaTeX-live-preview + let g:livepreview_previewer = 'zathura' + ''; + plugins = with pkgs.vimPlugins; [ + vimtex + vim-latex-live-preview + catppuccin-nvim + ]; + }; + + hyprlock.enable = true; + zed-editor.enable = true; + + firefox = { + enable = true; + languagePacks = [ + "en-US" + "de" + ]; + + # ---- POLICIES ---- + # Check about:policies#documentation for options. + policies = { + BlockAboutAddons = true; + BlockAboutConfig = false; + BlockAboutProfiles = true; + DisableTelemetry = true; + DisableFirefoxStudies = true; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisableFirefoxAccounts = true; + DisableAccounts = true; + DisableFirefoxScreenshots = true; + OverrideFirstRunPage = ""; + OverridePostUpdatePage = ""; + AppAutoUpdate = false; + DontCheckDefaultBrowser = true; + PrimaryPassword = false; + OfferToSaveLoginsDefault = false; + PasswordmanagerEnabled = false; + DisableMasterPasswordCreation = true; + AutofillAddressEnabled = false; + HttpsOnlyMode = "force_enabled"; + AutofillCreditCardEnabled = false; + DisplayBookmarksToolbar = "never"; # alternatives: "always" or "newtab" + DisplayMenuBar = "never"; # alternatives: "always", "never" or "default-on" + NoDefaultBookmarks = true; + SearchEngines = { + PreventInstalls = true; + Default = "DuckDuckGo"; + Remove = [ + "Google" + "Bing" + ]; + }; + SearchSuggestEnabled = false; + FirefoxHome = { + Search = true; + TopSites = false; + SponsoredTopSites = false; + Highlights = false; + Pocket = false; + SponsoredPocket = false; + Snippets = false; + Locked = false; + }; + + SearchBar = "unified"; # alternative: "separate" + DNSOverHTTPS = { + Enabled = true; + ProviderURL = "https://family.cloudflare-dns.com/dns-query"; + Locked = true; + Fallback = false; + }; + }; + + # ---- PREFERENCES ---- + # Check about:config for options. + #preferencesStatus = "locked"; # locks all settings + profiles.default = { + containersForce = true; + isDefault = true; + settings = { + "browser.contentblocking.category" = "strict"; + "extensions.pocket.enabled" = false; + "extensions.screenshots.disabled" = true; + "browser.topsites.contile.enabled" = false; + "browser.formfill.enable" = false; + "browser.search.suggest.enabled" = false; + "browser.search.suggest.enabled.private" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.showSearchSuggestionsFirst" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.feeds.snippets" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false; + "browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false; + "browser.newtabpage.activity-stream.section.highlights.includeVisited" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.system.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "extensions.autoDisableScopes" = 0; + "browser.translations.neverTranslateLanguages" = true; + "browser.translations.alwaysTranslateLanguages" = false; + "browser.warnOnQuit" = false; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + }; + + search = { + force = true; + default = "DuckDuckGo"; + engines = { + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ ":np" ]; + }; + + "NixOS Wiki" = { + urls = [ { template = "https://wiki.nixos.org/index.php?search={searchTerms}"; } ]; + iconUpdateURL = "https://wiki.nixos.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ ":nw" ]; + }; + + "ArchWiki" = { + urls = [ { template = "https://wiki.archlinux.org/index.php?search={searchTerms}"; } ]; + iconUpdateURL = "https://wiki.archlinux.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ ":aw" ]; + }; + + "Ecosia" = { + urls = [ { template = "https://www.ecosia.org/search?q={searchTerms}"; } ]; + iconUpdateURL = "https://ecosia.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ "@eco" ]; + }; + + "Wikipedia (de)" = { + urls = [ { template = "https://de.wikipedia.org/w/index.php?search={searchTerms}"; } ]; + iconUpdateURL = "https://wikipedia.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ ":wd" ]; + }; + + "IMDb" = { + urls = [ { template = "https://www.imdb.com/find/?q={searchTerms}"; } ]; + iconUpdateURL = "https://imdb.com/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ ":f" ]; + }; + + "dict.cc (de<->en)" = { + urls = [ { template = "https://www.dict.cc/?s={searchTerms}"; } ]; + iconUpdateURL = "https://dict.cc/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ ":d" ]; + }; + + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "DuckDuckGo".metaData.alias = "@ddg"; # builtin engines only support specifying one additional alias + "Wikipedia (en)".metaData.alias = ":w"; # builtin engines only support specifying one additional alias + }; + + order = [ + "DuckDuckGo" + "Nix Packages" + "ArchWiki" + "Nix Wiki" + "Ecosia" + ]; + }; + + userChrome = '' + /*** Remove items from image context menu ***/ + + /* Email Image... */ + #context-sendimage, + + /* Set Image as Desktop Background... (and preceding separator) */ + #context-sep-setbackground, #context-setDesktopBackground, + + /* Inspect Accessibility Properties */ + #context-inspect-a11y + { + display: none !important; + } + + /* Disable Firefox View */ + #firefox-view-button + { + display: none !important; + } + ''; + +# userChrome = '' +# * e.g. playing indicator (the text, not the icon) */ +#.tab-secondary-label { display: none !important; } +# +#/*---+---+---+---+---+---+---+ +# | C | O | L | O | U | R | S | +# +---+---+---+---+---+---+---*/ +# +# +#@media (prefers-color-scheme: dark) { :root { +# +# /* These colours are (mainly) used by the +# Container Tabs Plugin */ +# --uc-identity-colour-blue: #7ED6DF; +# --uc-identity-colour-turquoise: #55E6C1; +# --uc-identity-colour-green: #B8E994; +# --uc-identity-colour-yellow: #F7D794; +# --uc-identity-colour-orange: #F19066; +# --uc-identity-colour-red: #FC5C65; +# --uc-identity-colour-pink: #F78FB3; +# --uc-identity-colour-purple: #786FA6; +# +# /* Cascades main Colour Scheme */ +# --uc-base-colour: #1E2021; +# --uc-highlight-colour: #191B1C; +# --uc-inverted-colour: #FAFAFC; +# --uc-muted-colour: #AAAAAC; +# --uc-accent-colour: var(--uc-identity-colour-purple); +# +#}} +# +# +#@media (prefers-color-scheme: light) { :root { +# +# /* These colours are (mainly) used by the +# Container Tabs Plugin */ +# --uc-identity-colour-blue: #1D65F5; +# --uc-identity-colour-turquoise: #209FB5; +# --uc-identity-colour-green: #40A02B; +# --uc-identity-colour-yellow: #E49320; +# --uc-identity-colour-orange: #FE640B; +# --uc-identity-colour-red: #FC5C65; +# --uc-identity-colour-pink: #EC83D0; +# --uc-identity-colour-purple: #822FEE; +# +# /* Cascades main Colour Scheme */ +# --uc-base-colour: #FAFAFC; +# --uc-highlight-colour: #DADADC; +# --uc-inverted-colour: #1E2021; +# --uc-muted-colour: #191B1C; +# --uc-accent-colour: var(--uc-identity-colour-purple); +# +#}} +# +# +# +# +# +# +#/* Down here I'm just reassigning variables based on the colours set above. +# Feel free to play around with these but there is no editing necessary below this line. c: +# */ +# +#:root { +# +# --lwt-frame: var(--uc-base-colour) !important; +# --lwt-accent-color: var(--lwt-frame) !important; +# --lwt-text-color: var(--uc-inverted-colour) !important; +# +# --toolbar-field-color: var(--uc-inverted-colour) !important; +# +# --toolbar-field-focus-color: var(--uc-inverted-colour) !important; +# --toolbar-field-focus-background-color: var(--uc-highlight-colour) !important; +# --toolbar-field-focus-border-color: transparent !important; +# +# --toolbar-field-background-color: var(--lwt-frame) !important; +# --lwt-toolbar-field-highlight: var(--uc-inverted-colour) !important; +# --lwt-toolbar-field-highlight-text: var(--uc-highlight-colour) !important; +# --urlbar-popup-url-color: var(--uc-accent-colour) !important; +# +# --lwt-tab-text: var(--lwt-text-colour) !important; +# +# --lwt-selected-tab-background-color: var(--uc-highlight-colour) !important; +# +# --toolbar-bgcolor: var(--lwt-frame) !important; +# --toolbar-color: var(--lwt-text-color) !important; +# --toolbarseparator-color: var(--uc-accent-colour) !important; +# --toolbarbutton-hover-background: var(--uc-highlight-colour) !important; +# --toolbarbutton-active-background: var(--toolbarbutton-hover-background) !important; +# +# --lwt-sidebar-background-color: var(--lwt-frame) !important; +# --sidebar-background-color: var(--lwt-sidebar-background-color) !important; +# +# --urlbar-box-bgcolor: var(--uc-highlight-colour) !important; +# --urlbar-box-text-color: var(--uc-muted-colour) !important; +# --urlbar-box-hover-bgcolor: var(--uc-highlight-colour) !important; +# --urlbar-box-hover-text-color: var(--uc-inverted-colour) !important; +# --urlbar-box-focus-bgcolor: var(--uc-highlight-colour) !important; +# +#} +# +# +# +#.identity-color-blue { --identity-tab-color: var(--uc-identity-colour-blue) !important; --identity-icon-color: var(--uc-identity-colour-blue) !important; } +#.identity-color-turquoise { --identity-tab-color: var(--uc-identity-colour-turquoise) !important; --identity-icon-color: var(--uc-identity-colour-turquoise) !important; } +#.identity-color-green { --identity-tab-color: var(--uc-identity-colour-green) !important; --identity-icon-color: var(--uc-identity-colour-green) !important; } +#.identity-color-yellow { --identity-tab-color: var(--uc-identity-colour-yellow) !important; --identity-icon-color: var(--uc-identity-colour-yellow) !important; } +#.identity-color-orange { --identity-tab-color: var(--uc-identity-colour-orange) !important; --identity-icon-color: var(--uc-identity-colour-orange) !important; } +#.identity-color-red { --identity-tab-color: var(--uc-identity-colour-red) !important; --identity-icon-color: var(--uc-identity-colour-red) !important; } +#.identity-color-pink { --identity-tab-color: var(--uc-identity-colour-pink) !important; --identity-icon-color: var(--uc-identity-colour-pink) !important; } +#.identity-color-purple { --identity-tab-color: var(--uc-identity-colour-purple) !important; --identity-icon-color: var(--uc-identity-colour-purple) !important; } +# +#:root { +# +# --toolbarbutton-border-radius: var(--uc-border-radius) !important; +# --tab-border-radius: var(--uc-border-radius) !important; +# --arrowpanel-border-radius: var(--uc-border-radius) !important; +# +#} +# +# +# +# +# +##main-window, +##toolbar-menubar, +##TabsToolbar, +##navigator-toolbox, +##sidebar-box, +##nav-bar { box-shadow: none !important; } +# +# +##main-window, +##toolbar-menubar, +##TabsToolbar, +##PersonalToolbar, +##navigator-toolbox, +##sidebar-box, +##nav-bar { border: none !important; } +# +# +#/* remove "padding" left and right from tabs */ +#.titlebar-spacer { display: none !important; } +# +#/* fix Shield Icon padding */ +##urlbar-input-container[pageproxystate="valid"] +# > #tracking-protection-icon-container +# > #tracking-protection-icon-box +# > #tracking-protection-icon { +# padding-bottom: 1px; +#} +# +# +# +# +# +##PersonalToolbar { +# +# padding: 6px !important; +# box-shadow: inset 0 0 50vh rgba(0, 0, 0, var(--uc-darken-toolbar)) !important;; +# +#} +# +# +# +# +# +##statuspanel #statuspanel-label { +# +# border: none !important; +# border-radius: var(--uc-border-radius) !important; +# +#} +# +#@media (min-width: 1000px) { +# +# +# #navigator-toolbox { display: flex; flex-wrap: wrap; flex-direction: row; } +# +# +# #nav-bar { +# +# order: var(--uc-urlbar-position); +# width: var(--uc-urlbar-min-width); +# +# } +# +# #nav-bar #urlbar-container { min-width: 0px !important; width: auto !important; } +# +# +# #titlebar { +# +# order: 2; +# width: calc(100vw - var(--uc-urlbar-min-width) - 1px); +# +# } +# +# +# #PersonalToolbar { +# +# order: var(--uc-toolbar-position); +# width: 100%; +# +# } +# +# +# #navigator-toolbox:focus-within #nav-bar { width: var(--uc-urlbar-max-width); } +# #navigator-toolbox:focus-within #titlebar { width: calc(100vw - var(--uc-urlbar-max-width) - 1px); } +# +# +#} +# +##statuspanel #statuspanel-label { margin: 0 0 var(--uc-status-panel-spacing) var(--uc-status-panel-spacing) !important; } +# +##navigator-toolbox:not(:-moz-lwtheme) { background: var(--toolbar-field-background-color) !important; } +# +# +# +##nav-bar { +# +# padding-block-start: 0px !important; +# +# border: none !important; +# box-shadow: none !important; +# background: transparent !important; +# +#} +# +# +##urlbar, +##urlbar * { +# +# padding-block-start: var(--uc-urlbar-top-spacing) !important; +# +# outline: none !important; +# box-shadow: none !important; +# +#} +# +# +##urlbar-background { border: transparent !important; } +# +##urlbar[focused='true'] +# > #urlbar-background, +##urlbar:not([open]) +# > #urlbar-background { background: var(--toolbar-field-background-color) !important; } +# +# +##urlbar[open] +# > #urlbar-background { background: var(--toolbar-field-background-color) !important; } +# +# +#.urlbarView-row:hover +# > .urlbarView-row-inner, +#.urlbarView-row[selected] +# > .urlbarView-row-inner { background: var(--toolbar-field-focus-background-color) !important; } +# +# +#.urlbar-icon, #urlbar-go-button { margin: auto; } +#.urlbar-page-action { padding: 0 inherit !important; } +#.urlbar-page-action .urlbar-icon { margin-top: 6px !important; } +# +#/* remove gap after pinned tabs */ +##tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) +# > #tabbrowser-arrowscrollbox +# > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } +# +# +#/* Hides the list-all-tabs button*/ +##alltabs-button { display: var(--uc-show-all-tabs-button) !important; } +# +# +#/* remove tab shadow */ +#.tabbrowser-tab +# >.tab-stack +# > .tab-background { box-shadow: none !important; } +# +# +#/* multi tab selection */ +##tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([multiselected]) +# > .tab-stack +# > .tab-background:-moz-lwtheme { outline-color: var(--toolbarseparator-color) !important; } +# +# +# +# +# +#/* tab close button options */ +#.tabbrowser-tab:not([pinned]) .tab-close-button { display: var(--show-tab-close-button) !important; } +#.tabbrowser-tab:not([pinned]):hover .tab-close-button { display: var(--show-tab-close-button-hover) !important } +# +# +# +# +# +#/* adaptive tab width */ +#.tabbrowser-tab[selected][fadein]:not([pinned]) { max-width: var(--uc-active-tab-width) !important; } +#.tabbrowser-tab[fadein]:not([selected]):not([pinned]) { max-width: var(--uc-inactive-tab-width) !important; } +# +# +# +# +# +#/* container tabs indicator */ +#.tabbrowser-tab[usercontextid] +# > .tab-stack +# > .tab-background +# > .tab-context-line { +# +# margin: -1px var(--container-tabs-indicator-margin) 0 var(--container-tabs-indicator-margin) !important; +# height: 1px !important; +# +# box-shadow: var(--uc-identity-glow) var(--identity-tab-color) !important; +# +#} +# +# +# +# +# +#/* show favicon when media is playing but tab is hovered */ +#.tab-icon-image:not([pinned]) { opacity: 1 !important; } +# +# +#/* Makes the speaker icon to always appear if the tab is playing (not only on hover) */ +#.tab-icon-overlay:not([crashed]), +#.tab-icon-overlay[pinned][crashed][selected] { +# +# top: 5px !important; +# z-index: 1 !important; +# +# padding: 1.5px !important; +# inset-inline-end: -8px !important; +# width: 16px !important; height: 16px !important; +# +# border-radius: 10px !important; +# +#} +# +# +#/* style and position speaker icon */ +#.tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { +# +# stroke: transparent !important; +# background: transparent !important; +# opacity: 1 !important; fill-opacity: 0.8 !important; +# +# color: currentColor !important; +# +# stroke: var(--toolbar-bgcolor) !important; +# background-color: var(--toolbar-bgcolor) !important; +# +#} +# +# +#/* change the colours of the speaker icon on active tab to match tab colours */ +#.tabbrowser-tab[selected] .tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { +# +# stroke: var(--toolbar-bgcolor) !important; +# background-color: var(--toolbar-bgcolor) !important; +# +#} +# +# +#.tab-icon-overlay:not([pinned], [sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { margin-inline-end: 9.5px !important; } +# +# +#.tabbrowser-tab:not([image]) .tab-icon-overlay:not([pinned], [sharing], [crashed]) { +# +# top: 0 !important; +# +# padding: 0 !important; +# margin-inline-end: 5.5px !important; +# inset-inline-end: 0 !important; +# +#} +# +# +#.tab-icon-overlay:not([crashed])[soundplaying]:hover, +#.tab-icon-overlay:not([crashed])[muted]:hover, +#.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { +# +# color: currentColor !important; +# stroke: var(--toolbar-color) !important; +# background-color: var(--toolbar-color) !important; +# fill-opacity: 0.95 !important; +# +#} +# +# +#.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover, +#.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover, +#.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { +# +# color: currentColor !important; +# stroke: var(--toolbar-color) !important; +# background-color: var(--toolbar-color) !important; +# fill-opacity: 0.95 !important; +# +#} +# +# +#/* speaker icon colour fix */ +##TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying], +##TabsToolbar .tab-icon-overlay:not([crashed])[muted], +##TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] { color: var(--toolbar-color) !important; } +# +# +#/* speaker icon colour fix on hover */ +##TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover, +##TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover, +##TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { color: var(--toolbar-bgcolor) !important; } +# +#/* selected tab colour fix*/ +#.tabbrowser-tab[selected] .tab-content { +# background-color: var(--uc-highlight-colour) !important; +#} +# ''; + + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + bitwarden + darkreader + privacy-badger + languagetool + ]; + }; + }; }; - programs.ssh = - let - sshDir = "${homeDir}/.ssh"; - in - { - enable = true; - matchBlocks = { - "libre.moe *.libre.moe" = { - user = "leon"; - identityFile = "${sshDir}/libremoe"; - }; - "komu.boo *.komu.boo" = { - user = "leon"; - identityFile = "${sshDir}/komuboo"; - }; - "uni-paderborn.de upb.de *.uni-paderborn.de *.upb.de" = { - user = "lwilzer"; - identityFile = "${sshDir}/unipaderborn"; - }; - }; + xdg.portal = { + enable = true; + configPackages = with pkgs; [ hyprland ]; + extraPortals = with pkgs; [ hyprland ]; }; # This value determines the Home Manager release that your @@ -71,5 +916,37 @@ in # X11 xsession.enable = true; xsession.windowManager.command = "dwm"; -} + gtk = { + enable = true; + theme = { + name = "Catppuccin Mocha"; + package = pkgs.catppuccin-gtk; + }; + }; + qt = { + enable = true; + platformTheme.name = "gtk"; + style = { + name = "Catppuccin Mocha"; + package = pkgs.catppuccin; + }; + }; + + services = { + mako = { + enable = true; + defaultTimeout = 8000; + }; + + gpg-agent = { + enable = true; + }; + }; + dconf.settings = { + "org/virt-manager/virt-manager/connections" = { + autoconnect = [ "qemu:///system" ]; + uris = [ "qemu:///system" ]; + }; + }; +} diff --git a/hypr.nix b/hypr.nix new file mode 100644 index 0000000..dbdaa2e --- /dev/null +++ b/hypr.nix @@ -0,0 +1,80 @@ +{...}: + +{ + #imports = [ + # ./theme.nix + #]; + ### Hyprland + wayland.windowManager.hyprland = + { + enable = true; + settings = { + ### DEBUG + debug = { + disable_logs = false; + }; + + ### Refer to the wiki for more information. + ### https://wiki.hyprland.org/Configuring/Configuring-Hyprland/ + + ### Theme + source = [ "$XDG_CONFIG_HOME/hypr/mocha.conf" ]; + + ### Fuck you NVIDIA! + cursor = { + no_hardware_cursors = true; + }; + + ### Monitors + # See https://wiki.hyprland.org/Configuring/Monitors/ + monitor = [ + " , preferred, auto, 1" + "DP-1, preferred, auto, 1, bitdepth, 10" + ]; + + ### Programs + + ## Defaults + "$terminal" = "kitty"; + "$menu" = "wofi --show drun"; + + ## Autostart + exec-once = [ + # Status bar + "waynbar" + # Display Random Wallpaper + "unlink $XDG_PICTURES_DIR/Wallpapers/current ; ln -s $XDG_PICTURES_DIR/Wallpapers/$(ls $XDG_PICTURES_DIR/Wallpapers | sort -R | tail -1) $XDG_PICTURES_DIR/Wallpapers/current && hyprpaper" + # Notification Daemon + "mako" + # Idle Manager + "hypridle" + ]; + + ### Environment Variables + env = + [ + "LIBVA_DRIVER_NAME,nvidia" # fNVIDIA + "XDG_SESSION_TYPE,wayland" # fNVIDIA + "GBM_BACKEND,nvidia-drm" # fNVIDIA + "__GLX_VENDOR_LIBRARY_NAME,nvidia" # fNVIDIA + "NVD_BACKEND,direct" # fNVIDIA + "ELECTRON_OZONE_PLATFORM_HINT,auto" # fNVIDIA + "XCURSOR_SIZE,24" + "HYPRCURSOR_SIZE,24" + ]; + + ### Look and Feel + # Refer to https://wiki.hyprland.org/Configuring/Variables/ + # https://wiki.hyprland.org/Configuring/Variables/#general + general = + { + gaps_in = 4; + gaps_out = 8; + + border_size = 2; + + + }; + }; + }; +} diff --git a/theme.nix b/theme.nix new file mode 100644 index 0000000..cac68c7 --- /dev/null +++ b/theme.nix @@ -0,0 +1,43 @@ +{ pkgs, inputs, ...}: + +{ + inputs = { + nixpkgs.url = "nixpkgs/nixos-unstable"; + catppuccin.url = "github:catppuccin/nix"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, catppuccin, home-manager }: { + # for nixos module home-manager installations + nixosConfigurations.Zuse1 = pkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + catppuccin.nixosModules.catppuccin + # if you use home-manager + home-manager.nixosModules.home-manager + + { + # if you use home-manager + home-manager.users.leon = { + imports = [ + ./home.nix + catppuccin.homeManagerModules.catppuccin + ]; + }; + } + ]; + }; + + # for standalone home-manager installations + homeConfigurations.leon = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + modules = [ + ./home.nix + catppuccin.homeManagerModules.catppuccin + ]; + }; + }; +}