diff options
Diffstat (limited to 'users')
25 files changed, 1089 insertions, 0 deletions
diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..9209724 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,36 @@ +{ + lib, + inputs, + self, + ... +}: let + inherit (inputs.hm.lib) homeManagerConfiguration; + + /* + basic homeManagerConfiguration wrapper. defaults to x86_64-linux + and gives basic, nice defaults + */ + mapUsers = lib.mapAttrs ( + name: args: + homeManagerConfiguration (args + // { + modules = + [ + ./${name}/home.nix + + { + _module.args.osConfig = {}; + programs.home-manager.enable = true; + } + ] + ++ (args.modules or []); + + extraSpecialArgs = {inherit inputs self;}; + pkgs = args.pkgs or inputs.nixpkgs.legacyPackages."x86_64-linux"; + }) + ); +in { + flake.homeConfigurations = mapUsers { + seth = {}; + }; +} diff --git a/users/seth/default.nix b/users/seth/default.nix new file mode 100644 index 0000000..f5a1be2 --- /dev/null +++ b/users/seth/default.nix @@ -0,0 +1,12 @@ +{inputs, ...}: { + imports = with inputs; [ + ./programs + ./shell + + arkenfox.hmModules.arkenfox + catppuccin.homeManagerModules.catppuccin + nix-index-database.hmModules.nix-index + ]; + + home.stateVersion = "23.11"; +} diff --git a/users/seth/desktop/budgie/default.nix b/users/seth/desktop/budgie/default.nix new file mode 100644 index 0000000..2544edf --- /dev/null +++ b/users/seth/desktop/budgie/default.nix @@ -0,0 +1,44 @@ +{ + lib, + pkgs, + osConfig, + ... +}: let + cfg = osConfig.services.xserver.desktopManager.budgie or {enable = false;}; + + fromYaml = file: let + json = with pkgs; + runCommand "converted.json" {} '' + ${yj}/bin/yj < ${file} > $out + ''; + in + builtins.fromJSON (builtins.readFile json); +in { + config = lib.mkIf cfg.enable { + programs.alacritty = { + enable = true; + settings = let + file = + pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "alacritty"; + rev = "3c808cbb4f9c87be43ba5241bc57373c793d2f17"; + sha256 = "sha256-w9XVtEe7TqzxxGUCDUR9BFkzLZjG8XrplXJ3lX6f+x0="; + } + + "/catppuccin-mocha.yml"; + in + (fromYaml file) + // { + }; + }; + + dconf = { + enable = true; + settings = { + "com.solus-project.budgie-panel:Budgie" = { + pinned-launchers = ["firefox.desktop" "nemo.desktop" "discord.desktop"]; + }; + }; + }; + }; +} diff --git a/users/seth/desktop/default.nix b/users/seth/desktop/default.nix new file mode 100644 index 0000000..6815ab2 --- /dev/null +++ b/users/seth/desktop/default.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: { + options.desktop.enable = lib.mkEnableOption "desktop"; + + imports = [ + ./budgie + ./gnome + ./plasma + ]; + + config = lib.mkIf config.desktop.enable { + home.packages = with pkgs; + [ + discord + element-desktop + spotify + prismlauncher + ] + ++ lib.optionals stdenv.isDarwin [ + iterm2 + ] + ++ lib.optionals stdenv.isLinux [ + steam + ]; + }; +} diff --git a/users/seth/desktop/gnome/default.nix b/users/seth/desktop/gnome/default.nix new file mode 100644 index 0000000..8e5ef4c --- /dev/null +++ b/users/seth/desktop/gnome/default.nix @@ -0,0 +1,88 @@ +{ + lib, + pkgs, + osConfig, + ... +}: let + cfg = osConfig.services.xserver.desktopManager.gnome or {enable = false;}; +in { + config = lib.mkIf cfg.enable { + home.packages = with pkgs; + [ + adw-gtk3 + papirus-icon-theme + tuba + ] + ++ (with pkgs.gnomeExtensions; [ + blur-my-shell + burn-my-windows + caffeine + gradience + ]); + + dconf = { + enable = true; + settings = { + "org/gnome/shell" = { + disable-user-extensions = false; + + enabled-extensions = [ + ]; + + favorite-apps = [ + "firefox.desktop" + "org.gnome.Nautilus.desktop" + "discord.desktop" + ]; + }; + + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + document-font-name = ''Noto Sans 11''; + font-antialiasing = ''rgba''; + font-name = ''Noto Sans 11''; + icon-theme = ''Papirus-Dark''; + monospace-font-name = ''FiraCode 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 = "blackbox"; + command = "blackbox"; + binding = "<Control><Alt>t"; + }; + + "com/raggesilver/BlackBox" = { + font = ''FiraCode Nerd Font 12''; + theme-dark = ''Catppuccin-Mocha''; + remember-window-size = true; + }; + }; + }; + + gtk = { + enable = true; + theme = { + name = "adw-gtk3"; + package = pkgs.adw-gtk3; + }; + }; + + xdg.dataFile."blackbox/schemes/Catppuccin-Mocha.json".source = + pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "tilix"; + rev = "3fd05e03419321f2f2a6aad6da733b28be1765ef"; + sha256 = "sha256-SI7QxQ+WBHzeuXbTye+s8pi4tDVZOV4Aa33mRYO276k="; + } + + "/src/Catppuccin-Mocha.json"; + }; +} diff --git a/users/seth/desktop/plasma/default.nix b/users/seth/desktop/plasma/default.nix new file mode 100644 index 0000000..453ea65 --- /dev/null +++ b/users/seth/desktop/plasma/default.nix @@ -0,0 +1,58 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: let + cfg = osConfig.services.xserver.desktopManager.plasma5 or {enable = false;}; + themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; +in { + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + catppuccin-cursors + (catppuccin-kde.override + { + flavour = ["mocha"]; + accents = ["mauve"]; + }) + + (catppuccin-kvantum.override + { + variant = "Mocha"; + accent = "Mauve"; + }) + + libsForQt5.qtstyleplugin-kvantum + papirus-icon-theme + ]; + + xdg = { + configFile = { + "gtk-4.0/gtk.css".source = "${themeDir}/gtk-4.0/gtk.css"; + "gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css"; + }; + + dataFile."konsole/catppuccin-mocha.colorscheme".source = + pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "konsole"; + rev = "7d86b8a1e56e58f6b5649cdaac543a573ac194ca"; + sha256 = "EwSJMTxnaj2UlNJm1t6znnatfzgm1awIQQUF3VPfCTM="; + } + + "/Catppuccin-Mocha.colorscheme"; + }; + + gtk = { + enable = true; + + theme = { + name = "Catppuccin-Mocha-Standard-Mauve-dark"; + package = pkgs.catppuccin-gtk.override { + accents = ["mauve"]; + variant = "mocha"; + }; + }; + }; + }; +} diff --git a/users/seth/home.nix b/users/seth/home.nix new file mode 100644 index 0000000..5dfc062 --- /dev/null +++ b/users/seth/home.nix @@ -0,0 +1,17 @@ +{ + pkgs, + inputs, + ... +}: { + imports = [./.]; + + home = rec { + username = "seth"; + homeDirectory = + if pkgs.stdenv.isDarwin + then "/Users/${username}" + else "/home/${username}"; + }; + + nixpkgs.overlays = with inputs; [nur.overlay getchoo.overlays.default]; +} diff --git a/users/seth/programs/bat.nix b/users/seth/programs/bat.nix new file mode 100644 index 0000000..e772849 --- /dev/null +++ b/users/seth/programs/bat.nix @@ -0,0 +1,6 @@ +{ + programs.bat = { + enable = true; + catppuccin.enable = true; + }; +} diff --git a/users/seth/programs/chromium.nix b/users/seth/programs/chromium.nix new file mode 100644 index 0000000..37ca0da --- /dev/null +++ b/users/seth/programs/chromium.nix @@ -0,0 +1,16 @@ +{config, ...}: { + programs.chromium = { + inherit (config.desktop) enable; + # hw accel support + commandLineArgs = [ + "--ignore-gpu-blocklist" + "--enable-gpu-rasterization" + "--enable-gpu-compositing" + #"--enable-native-gpu-memory-buffers" + "--enable-zero-copy" + "--enable-features=VaapiVideoDecoder,VaapiVideoEncoder,CanvasOopRasterization,RawDraw,WebRTCPipeWireCapturer,Vulkan,WaylandWindowDecorations,WebUIDarkMode" + "--enable-features=WebRTCPipeWireCapturer,WaylandWindowDecorations,WebUIDarkMode" + "--force-dark-mode" + ]; + }; +} diff --git a/users/seth/programs/default.nix b/users/seth/programs/default.nix new file mode 100644 index 0000000..f60db17 --- /dev/null +++ b/users/seth/programs/default.nix @@ -0,0 +1,44 @@ +{ + pkgs, + inputs, + ... +}: { + imports = [ + ./bat.nix + ./eza.nix + ./git.nix + ./gpg.nix + ./ssh.nix + ./starship + ./vim.nix + ]; + + home.packages = with pkgs; [ + fd + nix-your-shell + nurl + rclone + restic + inputs.getchvim.packages.${pkgs.stdenv.hostPlatform.system}.default + ]; + + catppuccin.flavour = "mocha"; + + programs = { + btop = { + enable = true; + catppuccin.enable = true; + }; + + direnv = { + enable = true; + nix-direnv.enable = true; + }; + + ripgrep.enable = true; + + nix-index-database.comma.enable = true; + }; + + xdg.enable = true; +} diff --git a/users/seth/programs/eza.nix b/users/seth/programs/eza.nix new file mode 100644 index 0000000..0b63d54 --- /dev/null +++ b/users/seth/programs/eza.nix @@ -0,0 +1,7 @@ +{ + programs.eza = { + enable = true; + enableAliases = true; + icons = true; + }; +} diff --git a/users/seth/programs/firefox/arkenfox.nix b/users/seth/programs/firefox/arkenfox.nix new file mode 100644 index 0000000..e3005a6 --- /dev/null +++ b/users/seth/programs/firefox/arkenfox.nix @@ -0,0 +1,60 @@ +{lib, ...}: { + programs.firefox = { + arkenfox = { + enable = true; + version = "118.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; + }; + + # enable drm + "5500"."5508"."media.eme.enabled" = { + enable = true; + 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/programs/firefox/default.nix b/users/seth/programs/firefox/default.nix new file mode 100644 index 0000000..cb27bf7 --- /dev/null +++ b/users/seth/programs/firefox/default.nix @@ -0,0 +1,42 @@ +{ + config, + pkgs, + ... +}: { + imports = [ + ./arkenfox.nix + ]; + + home.sessionVariables = { + MOZ_ENABLE_WAYLAND = "1"; + }; + + programs.firefox = { + inherit (config.desktop) enable; + profiles.arkenfox = { + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + floccus + private-relay + ublock-origin + ]; + + isDefault = true; + + settings = { + # disable firefox accounts & pocket + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + + "gfx.webrender.all" = true; + "fission.autostart" = true; + + # hw accel + "media.ffmpeg.vaapi.enabled" = true; + + # widevine drm + "media.gmp-widevinecdm.enabled" = true; + }; + }; + }; +} diff --git a/users/seth/programs/git.nix b/users/seth/programs/git.nix new file mode 100644 index 0000000..34e8202 --- /dev/null +++ b/users/seth/programs/git.nix @@ -0,0 +1,40 @@ +{ + programs = { + gh = { + enable = true; + settings = { + git_protocol = "https"; + editor = "nvim"; + prompt = "enabled"; + }; + + gitCredentialHelper = { + enable = true; + hosts = ["https://github.com" "https://github.example.com"]; + }; + }; + + git = { + enable = true; + + delta = { + enable = true; + options = { + syntax-theme = "Catppuccin-mocha"; + }; + }; + + extraConfig = { + init = {defaultBranch = "main";}; + }; + + signing = { + key = "D31BD0D494BBEE86"; + signByDefault = true; + }; + + userEmail = "[email protected]"; + userName = "seth"; + }; + }; +} diff --git a/users/seth/programs/gpg.nix b/users/seth/programs/gpg.nix new file mode 100644 index 0000000..3fba0d3 --- /dev/null +++ b/users/seth/programs/gpg.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: { + programs.gpg.enable = true; + + services.gpg-agent = lib.mkIf pkgs.stdenv.isLinux { + enable = true; + + enableBashIntegration = config.programs.bash.enable; + enableFishIntegration = config.programs.fish.enable; + enableZshIntegration = config.programs.zsh.enable; + + pinentryFlavor = + if osConfig ? programs + then osConfig.programs.gnupg.agent.pinentryFlavor or "curses" + else "curses"; + }; +} diff --git a/users/seth/programs/mangohud.nix b/users/seth/programs/mangohud.nix new file mode 100644 index 0000000..fcdad87 --- /dev/null +++ b/users/seth/programs/mangohud.nix @@ -0,0 +1,16 @@ +{config, ...}: { + programs.mangohud = { + inherit (config.desktop) enable; + settings = { + legacy_layout = false; + 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/programs/ssh.nix b/users/seth/programs/ssh.nix new file mode 100644 index 0000000..627453e --- /dev/null +++ b/users/seth/programs/ssh.nix @@ -0,0 +1,42 @@ +{ + config, + pkgs, + ... +}: { + programs.ssh = { + enable = true; + package = pkgs.openssh; + + matchBlocks = let + sshDir = "${config.home.homeDirectory}/.ssh"; + in { + # git forges + "codeberg.org" = { + identityFile = "${sshDir}/codeberg"; + user = "git"; + }; + + # linux packaging + "aur.archlinux.org" = { + identityFile = "${sshDir}/aur"; + user = "aur"; + }; + + "pagure.io" = { + identityFile = "${sshDir}/copr"; + user = "git"; + }; + + # router + "192.168.1.1" = { + identityFile = "${sshDir}/openwrt"; + user = "root"; + }; + + # servers + "atlas".user = "atlas"; + }; + }; + + services.ssh-agent.enable = pkgs.stdenv.isLinux; +} diff --git a/users/seth/programs/starship/default.nix b/users/seth/programs/starship/default.nix new file mode 100644 index 0000000..76f528e --- /dev/null +++ b/users/seth/programs/starship/default.nix @@ -0,0 +1,22 @@ +{pkgs, ...}: { + programs.starship = { + enable = true; + enableBashIntegration = false; + enableZshIntegration = false; + settings = + { + format = "$all"; + palette = "catppuccin_mocha"; + command_timeout = 250; + } + // fromTOML (builtins.readFile ./starship.toml) + // fromTOML (builtins.readFile + (pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "starship"; + rev = "5629d2356f62a9f2f8efad3ff37476c19969bd4f"; + hash = "sha256-nsRuxQFKbQkyEI4TXgvAjcroVdG+heKX5Pauq/4Ota0="; + } + + "/palettes/mocha.toml")); + }; +} diff --git a/users/seth/programs/starship/starship.toml b/users/seth/programs/starship/starship.toml new file mode 100644 index 0000000..94a2922 --- /dev/null +++ b/users/seth/programs/starship/starship.toml @@ -0,0 +1,220 @@ +[aws] +symbol = " " + +[bun] +format = "via [$symbol]($style)" + +[buf] +format = "via [$symbol]($style)" +symbol = " " + +[c] +symbol = " " + +[cmake] +format = "via [$symbol]($style)" + +[cobol] +format = "via [$symbol]($style)" + +[conda] +symbol = " " + +[crystal] +format = "via [$symbol]($style)" + +[daml] +format = "via [$symbol]($style)" + +[dart] +format = "via [$symbol]($style)" +symbol = " " + +[directory] +read_only = " " + +[deno] +format = "via [$symbol]($style)" + +[docker_context] +symbol = " " + +[dotnet] +format = "[$symbol(🎯 $tfm )]($style)" + +[elixir] +format = 'via [$symbol]($style)' +symbol = " " + +[elm] +format = 'via [$symbol]($style)' +symbol = " " + +[erlang] +format = 'via [$symbol]($style)' + +[fennel] +format = 'via [$symbol]($style)' + +[fossil_branch] +symbol = " " + +[git_branch] +symbol = " " + +[golang] +format = 'via [$symbol]($style)' +symbol = " " + +[gradle] +format = 'via [$symbol]($style)' + +[guix_shell] +symbol = " " + +[haskell] +symbol = " " + +[haxe] +format = 'via [$symbol]($style)' +symbol = "⌘ " + +[helm] +format = 'via [$symbol]($style)' + +[hg_branch] +symbol = " " + +[java] +symbol = " " + +[julia] +format = 'via [$symbol]($style)' +symbol = " " + +[kotlin] +format = 'via [$symbol]($style)' + +[lua] +format = 'via [$symbol]($style)' +symbol = " " + +[memory_usage] +symbol = " " + +[meson] +format = 'via [$symbol]($style)' +symbol = "喝 " + +[nim] +format = 'via [$symbol]($style)' +symbol = " " + +[nix_shell] +symbol = " " + +[nodejs] +format = 'via [$symbol]($style)' +symbol = " " + +[ocaml] +format = 'via [$symbol(\($switch_indicator$switch_name\) )]($style)' + +[opa] +format = 'via [$symbol]($style)' + +[os.symbols] +Alpine = " " +Amazon = " " +Android = " " +Arch = " " +CentOS = " " +Debian = " " +DragonFly = " " +Emscripten = " " +EndeavourOS = " " +Fedora = " " +FreeBSD = " " +Garuda = " " +Gentoo = " " +HardenedBSD = "ﲊ " +Illumos = " " +Linux = " " +Macos = " " +Manjaro = " " +Mariner = " " +MidnightBSD = " " +Mint = " " +NetBSD = " " +NixOS = " " +OpenBSD = " " +openSUSE = " " +OracleLinux = " " +Pop = " " +Raspbian = " " +Redhat = " " +RedHatEnterprise = " " +Redox = " " +Solus = "ﴱ " +SUSE = " " +Ubuntu = " " +Unknown = " " +Windows = " " + +[package] +symbol = " " + +[perl] +format = 'via [$symbol]($style)' + +[php] +format = 'via [$symbol]($style)' + +[pijul_channel] +symbol = "🪺 " + +[pulumi] +format = 'via [$symbol$stack]($style)' + +[purescript] +format = 'via [$symbol]($style)' + +[python] +format = 'via [$symbol]($style)' +symbol = " " + +[raku] +format = 'via [$symbol]($style)' + +[red] +format = 'via [$symbol]($style)' + +[rlang] +format = 'via [$symbol]($style)' +symbol = "ﳒ " + +[ruby] +format = 'via [$symbol]($style)' +symbol = " " + +[rust] +format = 'via [$symbol]($style)' +symbol = " " + +[scala] +symbol = " " + +[spack] +symbol = "🅢 " + +[swift] +format = 'via [$symbol]($style)' + +[vagrant] +format = 'via [$symbol]($style)' + +[vlang] +format = 'via [$symbol]($style)' + +[zig] +format = 'via [$symbol]($style)' diff --git a/users/seth/programs/vim.nix b/users/seth/programs/vim.nix new file mode 100644 index 0000000..409e225 --- /dev/null +++ b/users/seth/programs/vim.nix @@ -0,0 +1,30 @@ +{ + programs.vim = { + enable = true; + settings = { + expandtab = false; + shiftwidth = 2; + tabstop = 2; + }; + extraConfig = '' + " https://wiki.archlinux.org/title/XDG_Base_Directory + set runtimepath^=$XDG_CONFIG_HOME/vim + set runtimepath+=$XDG_DATA_HOME/vim + set runtimepath+=$XDG_CONFIG_HOME/vim/after + + set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim + set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after + set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim + set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after + + let g:netrw_home = $XDG_DATA_HOME."/vim" + call mkdir($XDG_DATA_HOME."/vim/spell", 'p') + + set backupdir=$XDG_STATE_HOME/vim/backup | call mkdir(&backupdir, 'p') + set directory=$XDG_STATE_HOME/vim/swap | call mkdir(&directory, 'p') + set undodir=$XDG_STATE_HOME/vim/undo | call mkdir(&undodir, 'p') + set viewdir=$XDG_STATE_HOME/vim/view | call mkdir(&viewdir, 'p') + set viminfofile=$XDG_STATE_HOME/vim/viminfo + ''; + }; +} diff --git a/users/seth/shell/bash.nix b/users/seth/shell/bash.nix new file mode 100644 index 0000000..f9a1afa --- /dev/null +++ b/users/seth/shell/bash.nix @@ -0,0 +1,21 @@ +{config, ...}: { + programs.bash = { + enable = true; + bashrcExtra = '' + nixfile=${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.sh + [ -e "$nixfile" ] && source "$nixfile" + ''; + historyFile = "${config.xdg.stateHome}/bash/history"; + historyFileSize = 1000; + historySize = 100; + shellOptions = [ + "cdspell" + "checkjobs" + "checkwinsize" + "dirspell" + "globstar" + "histappend" + "no_empty_cmd_completion" + ]; + }; +} diff --git a/users/seth/shell/default.nix b/users/seth/shell/default.nix new file mode 100644 index 0000000..6ca9e3e --- /dev/null +++ b/users/seth/shell/default.nix @@ -0,0 +1,26 @@ +{config, ...}: { + imports = [ + ./bash.nix + ./fish.nix + ]; + + home = { + sessionVariables = let + inherit (config.xdg) configHome dataHome stateHome; + in { + EDITOR = "nvim"; + VISUAL = "$EDITOR"; + GPG_TTY = "$(tty)"; + CARGO_HOME = "${dataHome}/cargo"; + RUSTUP_HOME = "${dataHome}/rustup"; + LESSHISTFILE = "${stateHome}/less/history"; + NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc"; + }; + + shellAliases = { + diff = "diff --color=auto"; + g = "git"; + gs = "g status"; + }; + }; +} diff --git a/users/seth/shell/fish.nix b/users/seth/shell/fish.nix new file mode 100644 index 0000000..fc241d0 --- /dev/null +++ b/users/seth/shell/fish.nix @@ -0,0 +1,39 @@ +{ + config, + pkgs, + ... +}: { + programs.fish = { + enable = true; + catppuccin.enable = true; + + interactiveShellInit = '' + set -l nixfile ${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.fish + if test -e $nixfile + source $nixfile + end + + nix-your-shell fish | source + + abbr -a !! --position anywhere --function last_history_item + ''; + + functions = { + last_history_item.body = "echo $history[1]"; + }; + + shellAbbrs = { + nixgc = "sudo nix-collect-garbage -d && nix-collect-garbage -d"; + }; + + plugins = let + mkFishPlugins = builtins.map (plugin: { + name = plugin; + inherit (pkgs.fishPlugins.${plugin}) src; + }); + in + mkFishPlugins [ + "autopair" + ]; + }; +} diff --git a/users/seth/shell/zsh.nix b/users/seth/shell/zsh.nix new file mode 100644 index 0000000..23d5813 --- /dev/null +++ b/users/seth/shell/zsh.nix @@ -0,0 +1,114 @@ +{ + config, + pkgs, + ... +}: { + programs.zsh = { + enable = true; + enableAutosuggestions = true; + + 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 + ''; + + defaultKeymap = "emacs"; + dotDir = ".config/zsh"; + + 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 + + nix-your-shell zsh | source /dev/stdin + + 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 + ''; + + history = { + expireDuplicatesFirst = true; + path = "${config.xdg.stateHome}/zsh/zsh_history"; + save = 1000; + size = 100; + }; + + plugins = [ + { + name = "cattppuccin-zsh-syntax-highlighting"; + src = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "zsh-syntax-highlighting"; + rev = "06d519c20798f0ebe275fc3a8101841faaeee8ea"; + sha256 = "sha256-Q7KmwUd9fblprL55W0Sf4g7lRcemnhjh4/v+TacJSfo="; + }; + + file = "themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"; + } + + { + 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"; + } + ]; + + enableSyntaxHighlighting = true; + }; +} diff --git a/users/seth/system.nix b/users/seth/system.nix new file mode 100644 index 0000000..6d9d213 --- /dev/null +++ b/users/seth/system.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + ... +}: { + users.users.seth = + { + shell = pkgs.fish; + home = + if pkgs.stdenv.isDarwin + then "/Users/seth" + else "/home/seth"; + } + // lib.optionalAttrs pkgs.stdenv.isLinux { + extraGroups = ["wheel"]; + isNormalUser = true; + hashedPasswordFile = config.age.secrets.sethPassword.path; + }; + + programs.fish.enable = true; + + home-manager.users.seth = { + imports = + [ + ./. + ./desktop + ] + ++ lib.optionals pkgs.stdenv.isLinux [ + ./programs/chromium.nix + ./programs/firefox + ./programs/mangohud.nix + ]; + + nixpkgs.overlays = config.nixpkgs.overlays; + }; +} |
