{ config, pkgs, lib, system, allowed, secrets, ... }: { imports = [ # Make vscode settings writable (import (builtins.fetchurl { url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/mutability.nix"; sha256 = "4b5ca670c1ac865927e98ac5bf5c131eca46cc20abf0bd0612db955bfc979de8"; }) { inherit config lib; }) (import (builtins.fetchurl { url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/vscode.nix"; sha256 = "fed877fa1eefd94bc4806641cea87138df78a47af89c7818ac5e76ebacbd025f"; }) { inherit config lib pkgs; }) ]; home.username = "nx2"; home.homeDirectory = "/home/nx2"; home.stateVersion = "23.11"; nixpkgs.config = { allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) allowed.unfree-packages; permittedInsecurePackages = allowed.inecure-packages; }; home.packages = with pkgs; [ firefox chromium chatterino2 vscodium gimp inkscape kitty zathura remmina #vesktop thunderbird element-desktop # zoom-us obsidian spotify spicetify-cli obs-studio bitwarden hyprland-protocols waybar swww hyprland-autoname-workspaces rofi wlogout imv mpv pavucontrol fontpreview gtk2fontsel lynx tldr fzf figlet delta ripgrep lolcat libinput-gestures dotool brightnessctl wev gnome.nautilus gnome.gnome-themes-extra gnome.adwaita-icon-theme gnome.gnome-tweaks gtk3 gtk4 lxappearance element sssnake pipes # # You can also create simple shell scripts directly inside your # # configuration. For example, this adds a command 'my-hello' to your # # environment: (writeShellScriptBin "connect_to_pnx" '' pushd ~/.ssl/ sudo openvpn --config /home/nx2/.ssl/ljk-pnx.ovpn --auth-user-pass ~/.ssl/ljk-pnx-pass.txt #gets put there by home-manager popd '') (writeShellScriptBin "nxrbs-nix" '' set -e pushd ~/.nix-dots/ git diff '') (writeShellScriptBin "nxfetch" '' logo=$(echo -e " ⠀⠀⠀⠀⠰⣿⣧⠀⠀⠹⣿⣧⠀⣴⣿⠆⠀⠀⠀⠀ OS ⠀⠀⠀⣀⣀⣹⣿⣧⣀⣀⠘⣿⣿⣿⠏⠀⠀⠀⠀⠀ DE/WM ⠀⠀⠼⠿⠿⠿⠿⠿⠿⠿⠦⠘⣿⣿⡀⠀⣼⣧⠀⠀ TERM ⠀⠀⠀⠀⢠⣶⡶⠀⠀⠀⠀⠀⠈⠿⢁⣼⣿⠋⠀⠀ SHELL ⢾⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⡷ ISHELL ⠀⠀⣠⣿⡟⢁⣶⡀⠀⠀⠀⠀⠀⠾⠿⠃⠀⠀⠀⠀ KERNEL ⠀⠀⢻⡟⠀⠈⢿⣿⡄⠲⣶⣶⣶⣶⣶⣶⣶⡖⠀⠀ EDITOR ⠀⠀⠀⠀⠀⣰⣿⣿⣿⡄⠉⠉⢻⣿⣏⠉⠉⠀⠀⠀ TFM ⠀⠀⠀⠀⠰⣿⠟⠀⢻⣿⣆⠀⠀⠻⣿⠆⠀⠀⠀⠀ PROMPT " | lolcat --force) msg=" $(echo -e "$logo" | sed -n 3p): $(cat /etc/*-release | grep PRETTY_NAME | cut -c 14- | rev | cut -c 2- | rev) $(echo -e "$logo" | sed -n 4p): ''${DESKTOP_SESSION^} $(echo -e "$logo" | sed -n 5p): ''${TERM^} $(echo -e "$logo" | sed -n 6p): ''${SHELL} $(echo -e "$logo" | sed -n 7p): fish $(echo -e "$logo" | sed -n 8p): ''$(uname -r) $(echo -e "$logo" | sed -n 9p): ''${EDITOR} $(echo -e "$logo" | sed -n 10p): $(yazi --version) $(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1) " echo -e "$msg" '') # only works on spec arch, chage url for others (stdenv.mkDerivation { name = "easycommit"; src = pkgs.fetchurl { url = "https://github.com/blackironj/easycommit/releases/download/v0.0.1/easycommit-v0.0.1-linux-amd64.tar.gz"; sha256 = "sha256-Ip5wfVe/RzCxGGh1YFBllAn84nD7mUXbnMko+ue/C2E="; }; phases = ["installPhase"]; installPhase = '' mkdir -p $out/bin tar xf $src -C $out/ ls -la $out mv $out/easycommit $out/bin/ chmod +x $out/bin/easycommit ''; }) ]; xdg.mimeApps = { enable = true; defaultApplications = { "default-web-browser" = [ "firefox.desktop" ]; "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" ]; "image/png" = "imv.desktop"; "image/gif" = "imv.desktop"; }; }; # systemd.user.services = { # ydotoold = { # Unit = { # Description = "An auto-input utility for wayland"; # Documentation = [ "man:ydotool(1)" "man:ydotoold(8)" ]; # }; # Service = { # ExecStart = "/run/current-system/sw/bin/ydotoold --socket-path /tmp/ydotool_socket "; # }; # Install = { # WantedBy = ["default.target"]; # }; # }; # }; home.file = { ".vpn/ljk-pnx-cert.pem".text = secrets.pnxVpn.cert; ".vpn/ljk-pnx-cert.key".text = secrets.pnxVpn.certKey; ".vpn/ljk-pnx-ca.pem".text = secrets.pnxVpn.ca; ".vpn/ljk-pnx.ovpn".text = secrets.pnxVpn.ovpn; ".vpn/ljk-pnx-pass.txt".text = secrets.pnxVpn.pass; # ".config/libinput/gestures".text = '' # # Swipe threshold (0-100) # swipe_threshold 0 # # Gestures # gesture swipe left 3 ydotool key 276:1 276:0 # gesture swipe right 3 ydotool key 275:1 275:0 # '' ".config/libinput/gestures".text = '' # Swipe threshold (0-100) swipe_threshold 0 # Gestures gesture swipe left 3 echo key k:276 | dotool gesture swipe right 3 echo key k:275 | dotool ''; ".config/hyprland-autoname-workspaces/config.toml".text = '' version = "1.1.13" [class] Signal = "󱅵" DEFAULT = "{class}" libreoffice-writer = "" pavucontrol = "󰕾" "epicgameslauncher.exe" = "󰯷" "riotclientux.exe" = "󰰌" "[Cc]ode" = "󰨞" VirtualBox = "" KiCad = "" Gimp = "" code-oss = "󰨞" VSCodium = "󰨞" Alacritty = "" kitty = "" vesktop = "󰙯" "cyberpunk2077.exe" = "󰾲" "Tor Browser" = "󰾔" "[Tt]hunderbird" = "" Element = "󰘨" blueman-manager = "󰂯" obsidian = "󰠮" libreoffice-calc = "" zoom = "󰬡" mpv = "" chatterino = "" "com.obsproject.Studio" = "" "leagueclientux.exe" = "󰰌" "[sS]potify" = "" "org.remmina.Remmina" = "󰢹" steam = "󰓓" "galaxyclient.exe" = "󰮡" "[Ff]irefox" = "󰈹" pcbnew = "" ".*.exe" = "" Chromium = "" virt-manager = "" Bitwarden = "" "[tT]hunar" = "" zathura = "󰈦" discord = "󰙯" "VirtualBox Manager" = "" "org.inkscape.Inkscape" = "󰕙" "VirtualBox Machine" = "" lutris = "󰊗" "[gG]imp-.*" = "" [class_active] "(?i)ExampleOneTerm" = "icon" [initial_class] [initial_class_active] [workspaces_name] 10 = "ten" 4 = "four" 8 = "eight" 9 = "nine" 6 = "six" 1 = "one" 3 = "three" 2 = "two" 0 = "zero" 7 = "seven" 5 = "five" [title_in_class] [title_in_class_active] [title_in_initial_class] [title_in_initial_class_active] [initial_title_in_class] [initial_title_in_class_active] [initial_title_in_initial_class] [initial_title_in_initial_class_active] [exclude] "(?i)fcitx" = ".*" aProgram = "^$" "ueberzug.*" = "" "" = "^$" "[Ss]team" = "^(Friends List.*)?$" "explorer.exe" = ".*" "(?i)TestApp" = "" [format] dedup = false dedup_inactive_fullscreen = false delim = " " workspace = "{id}: {clients}" workspace_empty = "{id}" client = "{icon}" client_fullscreen = "{icon}" client_active = "{icon}" client_dup = "{icon}{counter_sup}" client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused_sup}" client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused_sup}" ''; # Remmina ".local/share/remmina/pnx_rdp_srv-phoe3-vmdms_192-168-1-104.remmina".source = ./secrets/pnx-vpn/pnx_rdp_srv-phoe3-vmdms_192-168-1-104.remmina; ".local/share/remmina/pnx_rdp_srv-phoenix-3_192-168-1-108.remmina".source = ./secrets/pnx-vpn/pnx_rdp_srv-phoenix-3_192-168-1-108.remmina; ".local/share/remmina/pnx_rdp_srv-phoenix2_192-168-1-101.remmina".source = ./secrets/pnx-vpn/pnx_rdp_srv-phoenix2_192-168-1-101.remmina; ".local/share/remmina/pnx_rdp_srv-remote_192-168-1-21.remmina".source = ./secrets/pnx-vpn/pnx_rdp_srv-remote_192-168-1-21.remmina; }; # Home Manager can also manage your environment variables through # 'home.sessionVariables'. If you don't want to manage your shell through Home # Manager then you have to manually source 'hm-session-vars.sh' located at # either # # ~/.nix-profile/etc/profile.d/hm-session-vars.sh # # or # # /etc/profiles/per-user/nx2/etc/profile.d/hm-session-vars.sh # # home.sessionVariables = { systemd.user.sessionVariables = { EDITOR = "micro"; BROWSER = "firefox"; # YDOTOOL_SOCKET = "/tmp/ydotool_socket"; }; programs.git = { enable = true; userName = "nx2"; userEmail = "nx2@local"; delta = { enable = true; options = { line-numbers = true; side-by-side = false; features = "unobtrusive-line-numbers decorations"; whitespace-error-style = "22 reverse"; }; }; }; #https://github.com/NixOS/nixpkgs/blob/592047fc9e4f7b74a4dc85d1b9f5243dfe4899e3/pkgs/applications/editors/vscode/extensions/default.nix#L1539 programs.vscode = { enable = true; package = pkgs.vscodium; extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide viktorqvarfordt.vscode-pitch-black-theme ms-python.python ms-python.black-formatter redhat.vscode-yaml redhat.vscode-xml ms-python.python mhutchie.git-graph github.vscode-pull-request-github esbenp.prettier-vscode gencer.html-slim-scss-css-class-completion donjayamanne.githistory mads-hartmann.bash-ide-vscode #jeanp413.open-remote-ssh # ms-vscode-remote.remote-ssh # ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ # { # name = "remote-ssh-edit"; # publisher = "ms-vscode-remote"; # version = "0.47.2"; # sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g"; # } ]; userSettings = { workbench.colorTheme = "Just Black"; editor.fontFamily = "'CaskaydiaCove Nerd Font', 'monospace', monospace"; }; enableUpdateCheck = false; enableExtensionUpdateCheck = false; keybindings = [ { key = "ctrl+d"; command = "editor.action.deleteLines"; when = "textInputFocus"; } { key = "ctrl+shift+d"; command = "editor.action.duplicateSelection"; when = "textInputFocus"; } { # unset so that ctrl d is not set twice key = ""; command = "editor.action.addSelectionToNextFindMatch"; when = "editorFocus"; } { # unset so that ctrl shift d is not set twice key = ""; command = "workbench.view.debug"; } ]; }; programs.fish = { enable = true; shellAliases = { ls = "eza --icons --git --smart-group --group-directories-first"; ll = "eza --icons --git --smart-group --group-directories-first --long"; la = "eza --icons --git --smart-group --group-directories-first --all"; lla = "eza --icons --git --smart-group --group-directories-first --all --long"; lt = "eza --icons --git --smart-group --group-directories-first --long --tree"; ltd = "eza --icons --git --smart-group --group-directories-first --long --tree -D"; lt2 = "eza --icons --git --smart-group --group-directories-first --long --tree -L 2"; sr = "sudo reboot"; nf = "neofetch"; nxf = "nxfetch"; nn = "nano"; m = "micro"; c = "codium"; code = "codium"; # ya = "yazi"; # function nxfiglet = "figlet"; }; functions = { ya = { description = "yazi follow directory wrapper"; body = '' set tmp (mktemp -t "yazi-cwd.XXXXX") yazi $argv --cwd-file="$tmp" if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] cd -- "$cwd" end rm -f -- "$tmp" ''; }; }; interactiveShellInit = '' set -g fish_greeting nxfetch ${pkgs.starship}/bin/starship init fish | source ''; }; programs.starship = { enable = true; settings = { add_newline = false; format = "$jobs\$battery\$username\$hostname\$localip\$shlvl\$singularity\$kubernetes\$directory\$vcsh\$git_branch\$git_commit\$git_state\$git_metrics\$git_status\$hg_branch\$docker_context\$package\$c\$cmake\$cobol\$daml\$dart\$deno\$dotnet\$elixir\$elm\$erlang\$golang\$haskell\$helm\$java\$julia\$kotlin\$lua\$nim\$nodejs\$ocaml\$perl\$php\$pulumi\$purescript\$python\$raku\$rlang\$red\$ruby\$rust\$scala\$swift\$terraform\$vlang\$vagrant\$zig\$buf\$nix_shell\$conda\$meson\$spack\$memory_usage\$aws\$gcloud\$openstack\$azure\$env_var\$crystal\$custom\$sudo\$cmd_duration\$time\$status\$container\$shell\$character"; aws.format = "[\\[$symbol($profile)(\\($region\\))(\\[$duration\\])\\]]($style)"; bun.format = "[\\[$symbol($version)\\]]($style)"; c.format = "[\\[$symbol($version(-$name))\\]]($style)"; cmake.format = "[\\[$symbol($version)\\]]($style)"; cmd_duration.format = "[\\[󰔛 $duration\\]]($style)"; cobol.format = "[\\[$symbol($version)\\]]($style)"; conda.format = "[\\[$symbol$environment\\]]($style)"; crystal.format = "[\\[$symbol($version)\\]]($style)"; daml.format = "[\\[$symbol($version)\\]]($style)"; dart.format = "[\\[$symbol($version)\\]]($style)"; deno.format = "[\\[$symbol($version)\\]]($style)"; docker_context.format = "[\\[$symbol$context\\]]($style)"; dotnet.format = "[\\[$symbol($version)(🎯 $tfm)\\]]($style)"; elixir.format = "[\\[$symbol($version \\(OTP $otp_version\\))\\]]($style)"; elm.format = "[\\[$symbol($version)\\]]($style)"; erlang.format = "[\\[$symbol($version)\\]]($style)"; gcloud.format = "[\\[$symbol$account(@$domain)(\\($region\\))\\]]($style)"; git_branch = { format = "[\\[$symbol$branch:]($style)"; style = "bold green"; }; git_status = { format = "([$all_status$ahead_behind]($style))(bold green)[\\]]($style)"; style = "blue yellow"; }; golang.format = "[\\[$symbol($version)\\]]($style)"; haskell.format = "[\\[$symbol($version)\\]]($style)"; helm.format = "[\\[$symbol($version)\\]]($style)"; hg_branch.format = "[\\[$symbol$branch\\]]($style)"; java.format = "[\\[$symbol($version)\\]]($style)"; julia.format = "[\\[$symbol($version)\\]]($style)"; kotlin.format = "[\\[$symbol($version)\\]]($style)"; kubernetes.format = "[\\[$symbol$context( \\($namespace\\))\\]]($style)"; lua.format = "[\\[$symbol($version)\\]]($style)"; memory_usage.format = "[\\[$symbol[$ram( | $swap)\\]]($style)"; meson.format = "[\\[$symbol$project\\]]($style)"; nim.format = "[\\[$symbol($version)\\]]($style)"; nix_shell.format = "[\\[$symbol$state( \\($name\\))\\]]($style)"; nodejs.format = "[\\[$symbol($version)\\]]($style)"; ocaml.format = "[\\[$symbol($version)(\\($switch_indicator$switch_name\\))\\]]($style)"; openstack.format = "[\\[$symbol$cloud(\\($project\\))\\]]($style)"; package.format = "[\\[$symbol$version\\]]($style)"; perl.format = "[\\[$symbol($version)\\]]($style)"; php.format = "[\\[$symbol($version)\\]]($style)"; pulumi.format = "[\\[$symbol$stack\\]]($style)"; purescript.format = "[\\[$symbol($version)\\]]($style)"; python = { format = ''[\\[''${symbol}''${pyenv_prefix}(''${version})(\\($virtualenv\\))\\]]($style)''; symbol = " "; }; raku.format = "[\\[$symbol($version-$vm_version)\\]]($style)"; red.format = "[\\[$symbol($version)\\]]($style)"; ruby.format = "[\\[$symbol($version)\\]]($style)"; rust.format = "[\\[$symbol($version)\\]]($style)"; scala.format = "[\\[$symbol($version)\\]]($style)"; spack.format = "[\\[$symbol$environment\\]]($style)"; sudo.format = "[\\[$symbol]\\]"; swift.format = "[\\[$symbol($version)\\]]($style)"; terraform.format = "[\\[$symbol$workspace\\]]($style)"; time.format = "[\\[$time\\]]($style)"; username.format = "[\\[$user\\]]($style)"; vagrant.format = "[\\[$symbol($version)\\]]($style)"; vlang.format = "[\\[$symbol($version)\\]]($style)"; zig.format = "[\\[$symbol($version)\\]]($style)"; directory = { format = "[\\[]($style)[$lock_symbol]($lock_style)[$path\\]]($style)"; style = "cyan bold"; }; character = { format = "$symbol"; success_symbol = "[\\[󰽧\\]](bold white) "; error_symbol = "[\\[\\]](bold red) "; vimcmd_symbol = "[\\[\\]](bold green) "; vimcmd_replace_one_symbol = "[\\[1\\]](bold green) "; vimcmd_replace_symbol = "[\\[R\\]](bold green) "; vimcmd_visual_symbol = "[\\[V\\]](bold green) "; }; battery.format = "[\\[$symbol$percentage\\]]($style)"; shlvl.format = "[\\[$symbol$shlvl\\]]($style)"; singularity.format = "[\\[$symbol\\[$env\\]\\]]($style)"; jobs = { format = "[\\[$symbol $number\\]]($style)"; number_threshold = 1; }; vcsh.format = "[\\[vcsh [$symbol$repo\\]]($style)"; hostname = { format = "[\\[$ssh_symbol$hostname\\]]($style)"; ssh_symbol = "爵"; ssh_only = true; }; }; }; gtk = { enable = true; theme = { name = "Adwaita-Dark"; package = pkgs.gnome.gnome-themes-extra; }; gtk3.extraConfig = { Settings = '' gtk-application-prefer-dark-theme=1 ''; }; gtk4.extraConfig = { Settings = '' gtk-application-prefer-dark-theme=1 ''; }; }; home.sessionVariables.GTK_THEME = "Adwaita-Dark"; xdg.configFile = { "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets"; "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css"; "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css"; }; dconf = { enable = true; settings = { "org/gnome/desktop/interface" = { color-scheme = "prefer-dark"; gtk-theme = "Adwaita-Dark"; }; }; }; # Wayland, X, etc. support for session vars # systemd.user.sessionVariables = home.sessionVariables; qt = { platformTheme = "gtk"; }; home.file.".ssh/config".text = '' HOST nxace HostName nx2.site User nx2 Port 50022 HOST nxacel HostName 192.168.178.32 User nx2 Port 50022 HOST nxrpi HostName nx2.site User pi Port 50023 HOST nxrpil HostName 192.168.178.31 User pi Port 50023 ''; # Let Home Manager install and manage itself. programs.home-manager.enable = true; }