diff options
Diffstat (limited to 'users/seth/mixins')
| -rw-r--r-- | users/seth/mixins/bash.nix | 33 | ||||
| -rw-r--r-- | users/seth/mixins/budgie.nix | 22 | ||||
| -rw-r--r-- | users/seth/mixins/catppuccin.nix | 14 | ||||
| -rw-r--r-- | users/seth/mixins/chromium.nix | 20 | ||||
| -rw-r--r-- | users/seth/mixins/default.nix | 23 | ||||
| -rw-r--r-- | users/seth/mixins/firefox/arkenfox.nix | 69 | ||||
| -rw-r--r-- | users/seth/mixins/firefox/default.nix | 56 | ||||
| -rw-r--r-- | users/seth/mixins/fish.nix | 55 | ||||
| -rw-r--r-- | users/seth/mixins/gh.nix | 25 | ||||
| -rw-r--r-- | users/seth/mixins/ghostty.nix | 10 | ||||
| -rw-r--r-- | users/seth/mixins/git.nix | 37 | ||||
| -rw-r--r-- | users/seth/mixins/gnome.nix | 69 | ||||
| -rw-r--r-- | users/seth/mixins/gpg.nix | 22 | ||||
| -rw-r--r-- | users/seth/mixins/mangohud.nix | 14 | ||||
| -rw-r--r-- | users/seth/mixins/niri.nix | 56 | ||||
| -rw-r--r-- | users/seth/mixins/nu.nix | 45 | ||||
| -rw-r--r-- | users/seth/mixins/plasma.nix | 24 | ||||
| -rw-r--r-- | users/seth/mixins/spotifyd.nix | 12 | ||||
| -rw-r--r-- | users/seth/mixins/ssh.nix | 67 | ||||
| -rw-r--r-- | users/seth/mixins/vim.nix | 42 | ||||
| -rw-r--r-- | users/seth/mixins/zsh.nix | 100 |
21 files changed, 815 insertions, 0 deletions
diff --git a/users/seth/mixins/bash.nix b/users/seth/mixins/bash.nix new file mode 100644 index 0000000..b278d05 --- /dev/null +++ b/users/seth/mixins/bash.nix @@ -0,0 +1,33 @@ +{ config, lib, ... }: + +{ + config = lib.mkMerge [ + { + programs.bash = { + historyFile = "${config.xdg.stateHome}/bash/history"; + historyFileSize = 1000; + historySize = 100; + + shellOptions = [ + "cdspell" + "checkjobs" + "checkwinsize" + "dirspell" + "globstar" + "histappend" + "no_empty_cmd_completion" + ]; + }; + } + + # TODO: find out if i need this anymore with standalone HM + (lib.mkIf config.seth.standalone.enable { + programs.bash = { + bashrcExtra = '' + nixfile=${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.sh + [ -e "$nixfile" ] && source "$nixfile" + ''; + }; + }) + ]; +} diff --git a/users/seth/mixins/budgie.nix b/users/seth/mixins/budgie.nix new file mode 100644 index 0000000..c0b1709 --- /dev/null +++ b/users/seth/mixins/budgie.nix @@ -0,0 +1,22 @@ +{ lib, osConfig, ... }: + +let + enable = osConfig.services.xserver.desktopManager.budgie.enable or false; +in + +{ + config = lib.mkIf enable { + dconf = { + enable = true; + settings = { + "com.solus-project.budgie-panel:Budgie" = { + pinned-launchers = [ + "firefox.desktop" + "nemo.desktop" + "discord-canary.desktop" + ]; + }; + }; + }; + }; +} diff --git a/users/seth/mixins/catppuccin.nix b/users/seth/mixins/catppuccin.nix new file mode 100644 index 0000000..b719c28 --- /dev/null +++ b/users/seth/mixins/catppuccin.nix @@ -0,0 +1,14 @@ +{ inputs, ... }: + +{ + imports = [ + inputs.catppuccin.homeManagerModules.catppuccin + ]; + + catppuccin = { + accent = "mauve"; + flavor = "mocha"; + + chromium.enable = false; + }; +} diff --git a/users/seth/mixins/chromium.nix b/users/seth/mixins/chromium.nix new file mode 100644 index 0000000..e744eb3 --- /dev/null +++ b/users/seth/mixins/chromium.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: + +{ + programs.chromium = { + dictionaries = [ pkgs.hunspellDictsChromium.en_US ]; + + extensions = [ + # uBlock Origin Lite + { id = "ddkjiahejlhfcafbddmgiahcphecmpfh"; } + # Bitwarden + { id = "nngceckbapebfimnlniiiahkandclblb"; } + # Floccus Bookmark Sync + { id = "fnaicdffflnofjppbagibeoednhnbjhg"; } + # Tabby Cat + { id = "mefhakmgclhhfbdadeojlkbllmecialg"; } + # Startpage + { id = "fgmjlmbojbkmdpofahffgcpkhkngfpef"; } + ]; + }; +} diff --git a/users/seth/mixins/default.nix b/users/seth/mixins/default.nix new file mode 100644 index 0000000..e898b0e --- /dev/null +++ b/users/seth/mixins/default.nix @@ -0,0 +1,23 @@ +{ + imports = [ + ./bash.nix + ./budgie.nix + ./catppuccin.nix + ./chromium.nix + ./firefox + ./fish.nix + ./gh.nix + ./ghostty.nix + ./git.nix + ./gnome.nix + ./gpg.nix + ./mangohud.nix + ./niri.nix + ./nu.nix + ./plasma.nix + ./spotifyd.nix + ./ssh.nix + ./vim.nix + ./zsh.nix + ]; +} diff --git a/users/seth/mixins/firefox/arkenfox.nix b/users/seth/mixins/firefox/arkenfox.nix new file mode 100644 index 0000000..cfb2a0d --- /dev/null +++ b/users/seth/mixins/firefox/arkenfox.nix @@ -0,0 +1,69 @@ +{ + lib, + inputs, + ... +}: + +{ + imports = [ inputs.arkenfox.hmModules.arkenfox ]; + + programs.firefox = { + arkenfox = { + enable = true; + version = "128.0"; + }; + + profiles.arkenfox.arkenfox = + let + enableSections = + sections: + lib.genAttrs sections (_: { + enable = true; + }); + in + lib.recursiveUpdate + { + enable = true; + + # enable safe browsing + "0400"."0403"."browser.safebrowsing.downloads.remote.enabled".value = true; + + # fix hulu + "1200"."1201"."security.ssl.require_safe_negotiation".value = false; + + "2600"."2651"."browser.download.useDownloadDir" = { + enable = true; + value = true; + }; + + # disable rfp letterboxing + "4500"."4504"."privacy.resistFingerprinting.letterboxing".value = false; + + "5000" = { + "5003"."signon.rememberSignons".enable = true; + # enable search autocomplete + "5021"."keyword.enabled".value = true; + }; + } + (enableSections [ + "0100" + "0200" + "0300" + "0400" + "0600" + "0700" + "0800" + "0900" + "1000" + "1200" + "1600" + "1700" + "2000" + "2400" + "2600" + "2700" + "2800" + "4500" + ]); + }; +} diff --git a/users/seth/mixins/firefox/default.nix b/users/seth/mixins/firefox/default.nix new file mode 100644 index 0000000..7d5fb7e --- /dev/null +++ b/users/seth/mixins/firefox/default.nix @@ -0,0 +1,56 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + imports = [ + inputs.getchpkgs.nixosModules.firefox-addons + # Requires `github:dwarfmaster/arkenfox-nixos` + # ./arkenfox.nix + ]; + + config = lib.mkMerge [ + { + programs.firefox = { + addons = [ + # uBlock Origin + # Bitwarden + "{446900e4-71c2-419f-a6a7-df9c091e268b}" + # Floccus + ]; + + profiles.arkenfox = { + isDefault = true; + + settings = { + # disable firefox accounts & pocket + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + + # hw accel + "media.ffmpeg.vaapi.enabled" = true; + + # widevine drm + "media.gmp-widevinecdm.enabled" = true; + }; + }; + }; + } + + (lib.mkIf (config.programs.firefox.enable && isLinux) { + home.sessionVariables = { + MOZ_ENABLE_WAYLAND = "1"; + }; + }) + ]; +} diff --git a/users/seth/mixins/fish.nix b/users/seth/mixins/fish.nix new file mode 100644 index 0000000..e02c736 --- /dev/null +++ b/users/seth/mixins/fish.nix @@ -0,0 +1,55 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkMerge [ + { + programs.fish = { + functions = { + last_history_item.body = "echo $history[1]"; + }; + + interactiveShellInit = '' + set --global hydro_symbol_prompt ">" + + set --global hydro_color_duration $fish_color_end + set --global hydro_color_error $fish_color_error + set --global hydro_color_git cba6f7 + set --global hydro_color_prompt $fish_color_cwd + set --global hydro_color_pwd $fish_color_user + ''; + + plugins = [ + { + name = "hydro"; + inherit (pkgs.fishPlugins.hydro) src; + } + ]; + + shellAbbrs = { + nixgc = "sudo nix-collect-garbage -d && nix-collect-garbage -d"; + "!!" = { + position = "anywhere"; + function = "last_history_item"; + }; + }; + }; + } + + # TODO: Do i still need this weird sourcing? + (lib.mkIf config.seth.standalone.enable { + programs.fish = { + interactiveShellInit = '' + set -l nixfile ${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.fish + if test -e $nixfile + source $nixfile + end + ''; + }; + }) + ]; +} diff --git a/users/seth/mixins/gh.nix b/users/seth/mixins/gh.nix new file mode 100644 index 0000000..f0ee96b --- /dev/null +++ b/users/seth/mixins/gh.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + ... +}: + +{ + programs.gh = { + enable = lib.mkDefault config.programs.git.enable; + + settings = { + git_protocol = "https"; + editor = "nvim"; + prompt = "enabled"; + }; + + gitCredentialHelper = { + enable = true; + hosts = [ + "https://github.com" + "https://github.example.com" + ]; + }; + }; +} diff --git a/users/seth/mixins/ghostty.nix b/users/seth/mixins/ghostty.nix new file mode 100644 index 0000000..aa2a1b8 --- /dev/null +++ b/users/seth/mixins/ghostty.nix @@ -0,0 +1,10 @@ +{ + programs.ghostty = { + enableBashIntegration = true; + enableFishIntegration = true; + + settings = { + bold-is-bright = true; + }; + }; +} diff --git a/users/seth/mixins/git.nix b/users/seth/mixins/git.nix new file mode 100644 index 0000000..9746425 --- /dev/null +++ b/users/seth/mixins/git.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +{ + imports = [ inputs.getchpkgs.homeModules.riff ]; + + config = lib.mkMerge [ + { + programs.git = { + riff.enable = true; + + extraConfig = { + init = { + defaultBranch = "main"; + }; + }; + + signing = { + key = "D31BD0D494BBEE86"; + signByDefault = true; + }; + + userEmail = "[email protected]"; + userName = "Seth Flynn"; + }; + } + + (lib.mkIf config.programs.git.enable { + home.packages = [ pkgs.git-branchless ]; + }) + ]; +} diff --git a/users/seth/mixins/gnome.nix b/users/seth/mixins/gnome.nix new file mode 100644 index 0000000..2214718 --- /dev/null +++ b/users/seth/mixins/gnome.nix @@ -0,0 +1,69 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.services.xserver.desktopManager.gnome.enable or false; +in + +{ + config = lib.mkIf enable { + dconf = { + enable = true; + settings = { + "org/gnome/shell" = { + disable-user-extensions = false; + + enabled-extensions = [ "[email protected]" ]; + + favorite-apps = [ + "chromium-browser.desktop" + "org.gnome.Nautilus.desktop" + "discord-canary.desktop" + ]; + }; + + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + document-font-name = "Noto Sans 11"; + font-antialiasing = "rgba"; + font-name = "Noto Sans 11"; + monospace-font-name = "Hack Nerd Font 10"; + }; + + "org/gnome/desktop/peripherals/mouse" = { + accel-profile = "flat"; + }; + + "org/gnome/desktop/wm/preferences" = { + titlebar-font = "Noto Sans Bold 11"; + }; + + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { + name = "ptyxis"; + command = "ptyxis"; + binding = "<Control><Alt>t"; + }; + }; + }; + + home.packages = [ + # Torrent client + pkgs.fragments + + # Keep my screen awake + pkgs.gnomeExtensions.caffeine + + # Terminal emulator + pkgs.ptyxis + + # Mastodon client + pkgs.tuba + ]; + + seth.adw-gtk3.enable = true; + }; +} diff --git a/users/seth/mixins/gpg.nix b/users/seth/mixins/gpg.nix new file mode 100644 index 0000000..eb36cdc --- /dev/null +++ b/users/seth/mixins/gpg.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + config = lib.mkMerge [ + (lib.mkIf isLinux { + services.gpg-agent = { + enable = lib.mkDefault config.programs.gpg.enable; + pinentryPackage = osConfig.programs.gnupg.agent.pinentryPackage or pkgs.pinentry-curses; + }; + }) + ]; +} diff --git a/users/seth/mixins/mangohud.nix b/users/seth/mixins/mangohud.nix new file mode 100644 index 0000000..2ad6c70 --- /dev/null +++ b/users/seth/mixins/mangohud.nix @@ -0,0 +1,14 @@ +{ + programs.mangohud = { + settings = { + cpu_stats = true; + cpu_temp = true; + gpu_stats = true; + gpu_temp = true; + fps = true; + frametime = true; + media_player = true; + media_player_name = "spotify"; + }; + }; +} diff --git a/users/seth/mixins/niri.nix b/users/seth/mixins/niri.nix new file mode 100644 index 0000000..22411dd --- /dev/null +++ b/users/seth/mixins/niri.nix @@ -0,0 +1,56 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.programs.niri.enable or false; +in + +{ + config = lib.mkIf enable { + # Set dark theme for Flatpak apps + # https://github.com/YaLTeR/niri/wiki/Important-Software#portals + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + }; + + home.packages = [ + # Torrent client + pkgs.fragments + + # Mastodon client + pkgs.tuba + + # the funni (I need it for native Wayland support) + pkgs.vesktop + + # TODO: Figure out how to export $DISPLAY from this + # so I don't need the above + pkgs.xwayland-satellite + ]; + + # Enable some things from the NixOS module here to + # apply Catppuccin themes + programs = { + alacritty.enable = true; + fuzzel.enable = true; + mako.enable = true; + ncspot.enable = true; # Official Spotify has ugly CSD + swaylock.enable = true; + yazi.enable = true; + zellij.enable = true; + }; + + seth = { + adw-gtk3.enable = true; + }; + }; +} diff --git a/users/seth/mixins/nu.nix b/users/seth/mixins/nu.nix new file mode 100644 index 0000000..ad25ce6 --- /dev/null +++ b/users/seth/mixins/nu.nix @@ -0,0 +1,45 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + theme = "catppuccin-${config.catppuccin.flavor}"; +in + +{ + config = lib.mkMerge [ + { + programs.nushell = { + configFile.text = '' + def "nixgc" [] { + sudo nix-collect-garbage -d; nix-collect-garbage -d + } + ''; + + envFile.text = '' + use ${pkgs.nu_scripts}/share/nu_scripts/themes/nu-themes/${theme}.nu + $env.config.color_config = (${theme}) + ''; + + inherit (config.home) shellAliases; + }; + } + + (lib.mkIf config.programs.nushell.enable { + programs = { + # Wrap it with bash + bash.initExtra = lib.mkAfter '' + if [[ $(ps --no-header --pid=$PPID --format=comm) != "nu" && -z ''${BASH_EXECUTION_STRING} ]]; then + exec ${lib.getExe config.programs.nushell.package} + fi + ''; + + # builtin `ls` is good here! + eza.enable = lib.mkForce false; + }; + }) + ]; +} diff --git a/users/seth/mixins/plasma.nix b/users/seth/mixins/plasma.nix new file mode 100644 index 0000000..fe9d69f --- /dev/null +++ b/users/seth/mixins/plasma.nix @@ -0,0 +1,24 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.services.desktopManager.plasma6.enable or false; +in + +{ + config = lib.mkIf enable { + home.packages = [ + # Matrix client + # TODO: Use after it drops libolm + # pkgs.kdePackages.neochat + # Mastodon client + pkgs.kdePackages.tokodon + # Torrent client + pkgs.qbittorrent + ]; + }; +} diff --git a/users/seth/mixins/spotifyd.nix b/users/seth/mixins/spotifyd.nix new file mode 100644 index 0000000..e2b0972 --- /dev/null +++ b/users/seth/mixins/spotifyd.nix @@ -0,0 +1,12 @@ +{ + services.spotifyd = { + settings = { + # Implicitly use zeroconf + global = { + autoplay = true; + backend = "pulseaudio"; + bitrate = 320; + }; + }; + }; +} diff --git a/users/seth/mixins/ssh.nix b/users/seth/mixins/ssh.nix new file mode 100644 index 0000000..3ae26b2 --- /dev/null +++ b/users/seth/mixins/ssh.nix @@ -0,0 +1,67 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + config = lib.mkMerge [ + { + programs.ssh = { + package = pkgs.openssh; + + matchBlocks = + let + sshDir = "${config.home.homeDirectory}/.ssh"; + in + { + # git forges + "codeberg.org" = { + identityFile = "${sshDir}/codeberg"; + user = "git"; + }; + + "github.com" = { + identityFile = "${sshDir}/github"; + user = "git"; + }; + + # linux packaging + "aur.archlinux.org" = { + identityFile = "${sshDir}/aur"; + user = "aur"; + }; + + "pagure.io" = { + identityFile = "${sshDir}/copr"; + user = "git"; + }; + + # macstadium m1 + "mini.scrumplex.net" = { + identityFile = "${sshDir}/macstadium"; + user = "bob-the-builder"; + }; + + # router + "192.168.1.1" = { + identityFile = "${sshDir}/openwrt"; + user = "root"; + }; + + # servers + "atlas".user = "atlas"; + }; + }; + } + + (lib.mkIf config.programs.ssh.enable { + services.ssh-agent.enable = lib.mkDefault isLinux; + }) + ]; +} diff --git a/users/seth/mixins/vim.nix b/users/seth/mixins/vim.nix new file mode 100644 index 0000000..e3269fc --- /dev/null +++ b/users/seth/mixins/vim.nix @@ -0,0 +1,42 @@ +{ + config, + pkgs, + ... +}: + +let + inherit (config.xdg) configHome dataHome stateHome; +in + +{ + programs.vim = { + packageConfigurable = pkgs.vim; + + settings = { + expandtab = false; + shiftwidth = 2; + tabstop = 2; + }; + + extraConfig = '' + " https://wiki.archlinux.org/title/XDG_Base_Directory + set runtimepath^=${configHome}/vim + set runtimepath+=${dataHome}/vim + set runtimepath+=${configHome}/vim/after + + set packpath^=${dataHome}/vim,${configHome}/vim + set packpath+=${configHome}/vim/after,${dataHome}/vim/after + set packpath^=${dataHome}/vim,${configHome}/vim + set packpath+=${configHome}/vim/after,${dataHome}/vim/after + + let g:netrw_home = "${dataHome}/vim" + call mkdir("${dataHome}/vim/spell", 'p') + + set backupdir=${stateHome}/vim/backup | call mkdir(&backupdir, 'p') + set directory=${stateHome}/vim/swap | call mkdir(&directory, 'p') + set undodir=${stateHome}/vim/undo | call mkdir(&undodir, 'p') + set viewdir=${stateHome}/vim/view | call mkdir(&viewdir, 'p') + set viminfofile=${stateHome}/vim/viminfo + ''; + }; +} diff --git a/users/seth/mixins/zsh.nix b/users/seth/mixins/zsh.nix new file mode 100644 index 0000000..87b04cb --- /dev/null +++ b/users/seth/mixins/zsh.nix @@ -0,0 +1,100 @@ +{ + config, + pkgs, + ... +}: + +{ + programs.zsh = { + defaultKeymap = "emacs"; + dotDir = ".config/zsh"; + + history = { + expireDuplicatesFirst = true; + path = "${config.xdg.stateHome}/zsh/zsh_history"; + save = 1000; + size = 100; + }; + + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + plugins = [ + { + name = "nix-zsh-completions"; + src = pkgs.nix-zsh-completions; + file = "share/zsh/plugins/nix/nix-zsh-completions.plugin.zsh"; + } + + { + name = "powerlevel10k"; + src = pkgs.zsh-powerlevel10k; + file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; + } + + { + name = "zsh-autopair"; + src = pkgs.zsh-autopair; + file = "share/zsh/zsh-autopair/autopair.zsh"; + } + + { + name = "zsh-completions"; + src = pkgs.zsh-completions; + file = "share/zsh-completions/zsh-completions.plugin.zsh"; + } + ]; + + completionInit = '' + autoload -Uz bashcompinit compinit + local zdump="${config.xdg.cacheHome}/zsh/zdump" + bashcompinit + compinit -d "$zdump" + if [[ ! "$zdump.zwc" -nt "$zdump" ]] + then + zcompile "$zdump" + fi + unset zdump + ''; + + initExtra = '' + if [[ -r "$XDG_CACHE_HOME/p10k-instant-prompt-*.zsh" ]]; then + source "$XDG_CACHE_HOME/p10k-instant-prompt-*.zsh" + fi + autoload -Uz promptinit colors + promptinit + colors + + zmodload zsh/zutil + zmodload zsh/complist + zstyle ":completion::*" group-name "" + zstyle ":completion:*" menu "select" + zstyle ":completion:*" squeeze-slashes "true" + zstyle ":completion::*" use-cache "true" + zstyle ":completion::*" cache-path "$zdump" + + unsetopt beep + unsetopt hist_beep + unsetopt ignore_braces + unsetopt list_beep + setopt always_to_end + setopt prompt_subst + setopt share_history + + # clear backbuffer with ctrl-l + function clear-screen-and-scrollback() { + echoti civis >"$TTY" + printf '%b' '\e[H\e[2J' >"$TTY" + zle .reset-prompt + zle -R + printf '%b' '\e[3J' >"$TTY" + echoti cnorm >"$TTY" + } + + zle -N clear-screen-and-scrollback + bindkey '^L' clear-screen-and-scrollback + + [[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh + ''; + }; +} |
