From bf8128dbce2230302f422dc2ab54e06a130d95df Mon Sep 17 00:00:00 2001 From: Asmir A Date: Sat, 24 Jan 2026 08:56:47 +0100 Subject: [PATCH] home/fuji: add home configuration and pkg list --- home/fuji/home.nix | 375 ++++++++++++++++++++++++++++++++++++ home/fuji/home_packages.nix | 193 +++++++++++++++++++ 2 files changed, 568 insertions(+) create mode 100644 home/fuji/home.nix create mode 100644 home/fuji/home_packages.nix diff --git a/home/fuji/home.nix b/home/fuji/home.nix new file mode 100644 index 0000000..fe695ca --- /dev/null +++ b/home/fuji/home.nix @@ -0,0 +1,375 @@ +{ lib +, pkgs +, ... +}: +let + qutebrowser_firejail = pkgs.writeShellScriptBin "qutebrowser" '' + firejail -- ${lib.getExe pkgs.qutebrowser} "$@" + ''; +in +{ + imports = [ + ../common/zsh.nix + ../common/i3status-rust.nix + ../common/sway.nix + ../common/i3.nix + ./home_packages.nix + ../common/whatsapp-for-linux.nix + ]; + + home.stateVersion = "22.11"; + home.username = "akill"; + home.homeDirectory = "/home/akill"; + + xdg.enable = true; + xdg.mimeApps = { + enable = true; + defaultApplications = { + "application/pdf" = "zathura.desktop"; + "default-web-browser" = "org.qutebrowser.qutebrowser.desktop"; + "text/html" = "org.qutebrowser.qutebrowser.desktop"; + "x-scheme-handler/about" = "org.qutebrowser.qutebrowser.desktop"; + "x-scheme-handler/http" = "org.qutebrowser.qutebrowser.desktop"; + "x-scheme-handler/https" = "org.qutebrowser.qutebrowser.desktop"; + "x-scheme-handler/unknown" = "org.qutebrowser.qutebrowser.desktop"; + }; + }; + + fonts.fontconfig.enable = true; + + home.sessionVariables = rec { + BROWSER = lib.getExe qutebrowser_firejail; + DEFAULT_BROWSER = "${BROWSER}"; + EDITOR = "nvim"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + MOZ_ENABLE_WAYLAND = "1"; + NIXOS_OZONE_WL = "1"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + SUDO_EDITOR = "nvim"; + WLR_RENDERER = "vulkan"; + }; + + home.pointerCursor = { + package = pkgs.adwaita-icon-theme; + name = "Adwaita"; + size = 38; + }; + + wayland.windowManager = { + sway.enable = true; + hyprland.enable = false; + }; + + programs = { + home-manager.enable = true; + + librewolf = { + enable = true; + settings = { + "webgl.disable" = true; + "middlemouse.paste" = false; + }; + }; + + tmux = { + enable = true; + clock24 = true; + keyMode = "vi"; + terminal = "screen-256color"; + plugins = with pkgs.tmuxPlugins; [ + sysstat + net-speed + gruvbox + ]; + }; + + mpv = { + enable = true; + scripts = [ + pkgs.mpvScripts.uosc + pkgs.mpvScripts.autosubsync-mpv + ]; + config = { + osc = "no"; + osd-bar = "no"; + border = "no"; + slang = "eng,en"; + alang = "eng,en"; + hwdec = "auto"; + vo = "dmabuf-wayland"; + ao = "pipewire"; + ytdl-format = "bestvideo[height<=1080]+bestaudio/best[height<=1080]"; + }; + + bindings = { + "s" = "script-binding uosc/subtitles"; + "a" = "script-binding uosc/audio"; + WHEEL_UP = "ignore"; + WHEEL_DOWN = "ignore"; + WHEEL_LEFT = "ignore"; + WHEEL_RIGHT = "ignore"; + }; + }; + + alacritty = { + enable = true; + + settings = { + font = { + normal.family = "JetBrainsMono"; + italic.family = "JetBrainsMono"; + bold.family = "JetBrainsMono"; + bold_italic.family = "JetBrainsMono"; + size = 14.0; + }; + }; + }; + + rofi = { + enable = true; + theme = "gruvbox-dark"; + }; + + foot = { + enable = true; + server.enable = true; + settings = { + main = { + font = "JetBrainsMono:size=10"; + dpi-aware = "yes"; + }; + mouse = { + hide-when-typing = "yes"; + }; + }; + }; + + qutebrowser = { + enable = true; + keyBindings = { + normal = { + "j" = "scroll-px 0 25"; + "k" = "scroll-px 0 -25"; + "u" = "undo --window"; + ";v" = "hint links spawn mpv {hint-url}"; + }; + }; + + settings = { + content.notifications.enabled = false; + content.pdfjs = true; + content.webgl = false; + fonts.completion.category = "14pt monospace"; + fonts.completion.entry = "14pt monospace"; + fonts.contextmenu = "14pt monospace"; + fonts.debug_console = "14pt monospace"; + fonts.downloads = "14pt monospace"; + fonts.hints = "14pt monospace"; + fonts.keyhint = "14pt monospace"; + fonts.messages.info = "14pt monospace"; + fonts.prompts = "14pt monospace"; + fonts.statusbar = "14pt monospace"; + hints.chars = "1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol0p"; + tabs.last_close = "close"; + tabs.position = "left"; + tabs.show = "multiple"; + tabs.tabs_are_windows = true; + tabs.width = "12%"; + zoom.default = "125%"; + }; + }; + + git = { + enable = true; + settings = { + user = { + name = "Asmir A"; + email = "asmir.abdulahovic@gmail.com"; + }; + init.defaultBranch = "master"; + pull = { + rebase = true; + }; + credential = { + helper = "store"; + }; + }; + signing.key = "020C42B7A9ABA3E2"; + signing.signByDefault = true; + }; + + obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + obs-vkcapture + input-overlay + obs-multi-rtmp + obs-pipewire-audio-capture + wlrobs + obs-vaapi + ]; + }; + + i3status-rust.enable = true; + z-lua.enable = true; + zsh.enable = true; + }; + + services = { + lorri.enable = false; + mako.enable = true; + cliphist.enable = true; + gammastep = { + enable = true; + latitude = "44.53"; + longitude = "18.67"; + temperature.day = 5500; + temperature.night = 2900; + }; + + gnome-keyring.enable = true; + + gpg-agent = { + enable = true; + defaultCacheTtl = 1800; + enableSshSupport = true; + }; + + swayidle = + let + locker = pkgs.writeShellScriptBin "swaylock_fancy" '' + ALL_IMGS="" + LOCK_ARGS="" + for OUTPUT in $(${pkgs.sway}/bin/swaymsg -t get_outputs | ${lib.getExe pkgs.jq} -r '.[].name') + do + TMP_FILE=$(${pkgs.coreutils}/bin/mktemp /tmp/.swaylock_ss_XXXXXX.jpg) + ${lib.getExe pkgs.grim} -t ppm -o $OUTPUT - | \ + ${lib.getExe pkgs.ffmpeg} -y -loglevel 0 -i - -vframes 1 -vf "boxblur=10" "$TMP_FILE" + LOCK_ARGS="$LOCK_ARGS --image $OUTPUT:$TMP_FILE" + ALL_IMGS="$ALL_IMGS $TMP_FILE" + done + ${lib.getExe pkgs.swaylock} -f $LOCK_ARGS + ${pkgs.coreutils}/bin/shred $ALL_IMGS + ${pkgs.coreutils}/bin/rm $ALL_IMGS + ''; + in + /* + refresh_i3status = pkgs.writeShellScriptBin "refresh_i3status" '' + ${pkgs.coreutils}/bin/sleep 1 && ${pkgs.procps}/bin/pkill -USR1 i3status-rs + ''; + */ + { + enable = true; + events = [ + { + event = "before-sleep"; + command = "${locker}/bin/swaylock_fancy"; + } + { + event = "lock"; + command = "${locker}/bin/swaylock_fancy"; + } + /* + { + event = "after-resume"; + command = "${refresh_i3status}/bin/refresh_i3status"; + } + */ + ]; + timeouts = [ + { + timeout = 15 * 60; + command = "${locker}/bin/swaylock_fancy"; + } + ]; + }; + + kanshi = { + enable = true; + settings = [ + { + profile.name = "undocked"; + profile.outputs = [ + { + criteria = "eDP-1"; + } + ]; + } + + { + profile.name = "docked"; + profile.outputs = [ + { + criteria = "eDP-1"; + position = "0,0"; + } + { + criteria = "Philips Consumer Electronics Company PHL 272S1 UHB2347026536"; + mode = "1920x1080@74.973Hz"; + position = "1920,0"; + } + { + criteria = "Philips Consumer Electronics Company PHL 272S1 UHB2347026535"; + mode = "1920x1080@74.973Hz"; + position = "3840,0"; + } + ]; + } + ]; + }; + }; + + systemd.user = { + services = { + + wayland-pipewire-idle-inhibit = { + Unit.Description = "inhibit sleep while audio output is active"; + Service = { + ExecStart = "${lib.getExe pkgs.wayland-pipewire-idle-inhibit}"; + Restart = "always"; + RestartSec = 10; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + + lisgd = { + Unit = { + Description = "Libinput gesture daemon"; + PartOf = [ "graphical-session.target" ]; + After = [ " graphical-session.target" ]; + }; + Service = { + Environment = [ + "PATH=/run/current-system/sw/bin:/etc/profiles/per-user/%u/bin" + ]; + ExecStart = '' + ${pkgs.lisgd}/bin/lisgd -d \ + /dev/input/by-path/pci-0000:00:15.1-platform-i2c_designware.1-event \ + -g ''\'2,DU,*,*,B,${pkgs.procps}/bin/pkill -SIGRTMIN wvkbd-mobintl''\' \ + -g ''\'2,LR,*,*,swaymsg workspace prev''\' \ + -g ''\'2,RL,*,*,swaymsg workspace next''\' \ + -g ''\'3,DU,*,*,B,${pkgs.sway}/bin/swaymsg exec ${pkgs.kdePackages.dolphin}/bin/dolphin''\' \ + -g ''\'3,UD,*,*,B,${pkgs.sway}/bin/swaymsg exec ${lib.getExe pkgs.nwg-drawer}''\' \ + -g ''\'4,UD,*,*,B,${pkgs.sway}/bin/swaymsg kill''\' \ + ''; + Restart = "on-failure"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + + wvkbd = { + Unit = { + Description = "Wayland virtual keyboard"; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + ExecStart = "${pkgs.wvkbd}/bin/wvkbd-mobintl -l full --hidden"; + Restart = "on-failure"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + + + }; + }; +} diff --git a/home/fuji/home_packages.nix b/home/fuji/home_packages.nix new file mode 100644 index 0000000..4afd707 --- /dev/null +++ b/home/fuji/home_packages.nix @@ -0,0 +1,193 @@ +{ lib +, pkgs +, inputs +, system +, ... +}: +let + chromium_teams = pkgs.writeShellScriptBin "chromium_teams" '' + ${lib.getExe pkgs.ungoogled-chromium} --socket=wayland org.chromium.Chromium --app=https://teams.microsoft.com/ + ''; + chromium_discord = pkgs.writeShellScriptBin "chromium_discord" '' + ${lib.getExe pkgs.ungoogled-chromium} --socket=wayland org.chromium.Chromium --app=https://discordapp.com/channels/@me + ''; + chromium_stackfield = pkgs.writeShellScriptBin "chromium_stackfield" '' + ${lib.getExe pkgs.ungoogled-chromium} --socket=wayland org.chromium.Chromium --app=https://stackfield.com/ + ''; + nixy_switch = pkgs.writeShellScriptBin "nixy_switch" '' + ${pkgs.util-linux}/bin/ionice -c 3 -- \ + ${pkgs.coreutils}/bin/nice -n 20 -- \ + ${lib.getExe pkgs.nixos-rebuild} --flake ./#fuji switch + ''; + qcad = pkgs.writeShellScriptBin "qcad" '' + QT_QPA_PLATFORM=xcb ${lib.getExe pkgs.qcad} $@ + ''; + ssh_proxy = pkgs.writeShellScriptBin "ssh_proxy" '' + if ${pkgs.coreutils}/bin/test $# -ne 1; then + echo "Usage: $0 @" + exit + fi + PROXY_PORT="1337" + ${lib.getExe pkgs.openssh} -D "$PROXY_PORT" -q -N "$@" + ''; + wrap_sh = + let + bubblewrap = pkgs.callPackage ../../packages/bubblewrap/default.nix { }; + in + pkgs.writeShellScriptBin "wrap.sh" '' + if ${pkgs.coreutils-full}/bin/test $# -ne 1; then + echo "Usage: $0 " + exit + fi + FULL_PATH=$(${pkgs.coreutils-full}/bin/realpath "$1") + BUBBLEWRAP_DIR="$1" ${bubblewrap}/bin/bwrap \ + --bind / / \ + --dev /dev \ + --overlay-src "$FULL_PATH" \ + --tmp-overlay "$FULL_PATH" \ + "$SHELL" + ''; +in +{ + home.packages = + with pkgs; + [ + alsa-tools + alsa-utils + appimage-run + arp-scan + birdtray + blackmagic + blender + btop + cached-nix-shell + caddy + calibre + cargo + cmake + compsize + cura-appimage + deluge + dfu-util + discord + dmenu-wayland + drawio + dualsensectl + ffmpeg-full + firefox + freecad + gcc + gdb + ghostscript + glab + glaxnimate + gnumake + go + grim + heimdall + hyperfine + icestorm + iio-hyprland + imagemagick + imv + inkscape + #jellyfin-media-player + kdePackages.ark + kdePackages.dolphin + kdePackages.kdegraphics-thumbnailers + kdePackages.kdenlive + kdePackages.okular + kicad + kodi-wayland + komikku + krita + libinput + libjxl + libnotify + libreoffice-qt6-fresh + libva-utils + lsix + lsix + mediainfo + ncdu + neovide + nextpnr + ngspice + nix-init + nixpkgs-fmt + nix-prefetch-git + nom + openems + openocd + openscad + pandoc + #paraview + pass-wayland + patchelf + pavucontrol + pay-respects + perf + pirate-get + poppler-utils + powertop + pulsemixer + pwvucontrol + python3 + python3Packages.west + qucs-s + radeontop + remmina + river-classic + rizin + rtorrent + sbcl + screen + seer + sioyek + slurp + steam-run + stm32cubemx + styluslabs-write + swayimg + tea + teams-for-linux + tectonic + tessen + texlive.combined.scheme-full + thunderbird + typst + ungoogled-chromium + upx + viber + wasistlos + waybar + wdisplays + weechat + wine + wireshark + wl-clipboard + wlr-randr + wofi + x2goclient + xournalpp + yewtube + yosys + yt-dlp + zapzap + zathura + zig + ] + ++ [ + chromium_discord + chromium_stackfield + chromium_teams + nixy_switch + qcad + ssh_proxy + wrap_sh + ] + ++ [ + inputs.swaysw.packages.${system}.swaysw + (pkgs.callPackage ../../packages/bubblewrap/default.nix { }) + ]; +}