diff --git a/configs/bash/bashrc b/configs/bash/bashrc new file mode 100644 index 0000000..d6933a7 --- /dev/null +++ b/configs/bash/bashrc @@ -0,0 +1,21 @@ +export PATH="$HOME/.local/bin:$PATH" +set -o vi + + +alias build="./build.sh" +alias emacsd="emacs --daemon" +alias emacsc="emacsclient -c -a 'emacs'" +alias gap="git add -p" +alias gcp="git commit -p" +alias kpx="keepassxc-cli open" +alias ls="ls --color=auto" +alias ll="ls -l" +alias la="ls -lA" +alias new="source \$HOME/.bashrc" +alias newbar="pkill waybar; waybar &disown" +alias ping="ping -c 5" +alias vi="\vim" +alias vim="nvim" +alias ..="cd .." + +fastfetch -c $HOME/.config/fastfetch/config.json diff --git a/configs/dms-desktop/settings.json b/configs/dms-desktop/settings.json index a0a24d0..2c7d656 100644 --- a/configs/dms-desktop/settings.json +++ b/configs/dms-desktop/settings.json @@ -226,6 +226,8 @@ "dankLauncherV2BorderColor": "primary", "dankLauncherV2ShowFooter": true, "dankLauncherV2UnloadOnClose": false, + "dankLauncherV2IncludeFilesInAll": false, + "dankLauncherV2IncludeFoldersInAll": false, "useAutoLocation": true, "weatherEnabled": true, "networkPreference": "auto", @@ -274,11 +276,13 @@ "acSuspendTimeout": 5400, "acSuspendBehavior": 0, "acProfileName": "", + "acPostLockMonitorTimeout": 0, "batteryMonitorTimeout": 0, "batteryLockTimeout": 0, "batterySuspendTimeout": 0, "batterySuspendBehavior": 0, "batteryProfileName": "", + "batteryPostLockMonitorTimeout": 0, "batteryChargeLimit": 100, "lockBeforeSuspend": true, "loginctlLockIntegration": true, diff --git a/configs/emacs/early-init.el b/configs/emacs/early-init.el index 512068a..0b162aa 100644 --- a/configs/emacs/early-init.el +++ b/configs/emacs/early-init.el @@ -1 +1,2 @@ +(setq user-emacs-directory (expand-file-name "~/.config/emacs/")) (setq package-enable-at-startup nil) diff --git a/configs/git/config b/configs/git/config new file mode 100644 index 0000000..95782f3 --- /dev/null +++ b/configs/git/config @@ -0,0 +1,22 @@ +[user] + email = "maloneliam@proton.me" + name = "Liam Malone" + +[core] + pager = "diff-so-fancy | less --tabs=4 -RFX" + +[interactive] + diffFilter = "diff-so-fancy --patch" + +[filter "lfs"] + clean = "git-lfs clean -- %f" + process = "git-lfs filter-process" + required = true + smudge = "git-lfs smudge -- %f" + +[gpg] + format = "openpgp" + +[color] + ui = true + diff --git a/configs/gnupg/gpg-agent.conf b/configs/gnupg/gpg-agent.conf new file mode 100644 index 0000000..d342c8b --- /dev/null +++ b/configs/gnupg/gpg-agent.conf @@ -0,0 +1,3 @@ +enable-ssh-support +grab +default-cache-ttl 1800 diff --git a/configs/user-dirs.dirs b/configs/user-dirs.dirs index 0db0cae..7f9a959 100644 --- a/configs/user-dirs.dirs +++ b/configs/user-dirs.dirs @@ -5,11 +5,11 @@ # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # -XDG_DESKTOP_DIR="$HOME/" -XDG_DOWNLOAD_DIR="$HOME/downloads" -XDG_TEMPLATES_DIR="$HOME/" -XDG_PUBLICSHARE_DIR="$HOME/" -XDG_DOCUMENTS_DIR="$HOME/documents" -XDG_MUSIC_DIR="$HOME/music" -XDG_PICTURES_DIR="$HOME/pictures" -XDG_VIDEOS_DIR="$HOME/videos" +XDG_DESKTOP_DIR="$HOME/Desktop" +XDG_DOWNLOAD_DIR="$HOME/Downloads" +XDG_TEMPLATES_DIR="$HOME/Templates" +XDG_PUBLICSHARE_DIR="$HOME/Public" +XDG_DOCUMENTS_DIR="$HOME/Documents" +XDG_MUSIC_DIR="$HOME/Music" +XDG_PICTURES_DIR="$HOME/Pictures" +XDG_VIDEOS_DIR="$HOME/Videos" diff --git a/flake.lock b/flake.lock index f15f47e..fe9b85e 100644 --- a/flake.lock +++ b/flake.lock @@ -142,26 +142,6 @@ "type": "github" } }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1775983377, - "narHash": "sha256-ZeRjipGQnVtQ/6batI+yVOrL853FZsL0m9A63OaSfgM=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "e0ca734ffc85d25297715e98010b93303fa165c4", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, "hyprcursor": { "inputs": { "hyprlang": [ @@ -698,7 +678,6 @@ "dms": "dms", "focus-editor": "focus-editor", "fred": "fred", - "home-manager": "home-manager", "hyprland": "hyprland", "hyprpwcenter": "hyprpwcenter", "nixpkgs": "nixpkgs_2", diff --git a/flake.nix b/flake.nix index a82b5e4..e8f0b78 100644 --- a/flake.nix +++ b/flake.nix @@ -16,11 +16,6 @@ url = "path:/home/liamm/nix-pkgs/fred"; inputs.nixpkgs.follows = "nixpkgs"; }; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - hyprland = { url = "github:hyprwm/Hyprland"; inputs.nixpkgs.follows = "nixpkgs"; @@ -50,7 +45,7 @@ fred = inputs.fred.packages.${system}.fred; focus = inputs.focus-editor.packages.${system}.focus; hyprland = inputs.hyprland.packages.${system}.hyprland; - hyprsysteminfo = inputs.hyprsysteminfo.packages.${system}.hyprsysteminfo; + # hyprsysteminfo = inputs.hyprsysteminfo.packages.${system}.hyprsysteminfo; hyprpwcenter = inputs.hyprpwcenter.packages.${system}.hyprpwcenter; quickshell = inputs.quickshell.packages.${system}.quickshell; xdg-desktop-portal-hyprland = inputs.hyprland.packages.${system}.xdg-desktop-portal-hyprland; diff --git a/hosts/darp8/configuration.nix b/hosts/darp8/configuration.nix index d5c3041..72ecab2 100644 --- a/hosts/darp8/configuration.nix +++ b/hosts/darp8/configuration.nix @@ -4,7 +4,9 @@ imports = [ ./hardware-configuration.nix ../graphical/configuration.nix - inputs.home-manager.nixosModules.default + ./file.nix + ./pkgs.nix + ./services.nix ]; networking.hostName = "darp8"; @@ -60,15 +62,6 @@ }; }; - home-manager = { - useGlobalPkgs = true; - extraSpecialArgs = { inherit inputs; inherit cfg; }; - users = { - "${cfg.username}" = import ./home.nix; - }; - backupFileExtension = ".bak"; - }; - # This option defines the first version of NixOS you have installed on this particular machine # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, # and migrated your data accordingly. diff --git a/hosts/darp8/file.nix b/hosts/darp8/file.nix index f725bd5..1205409 100644 --- a/hosts/darp8/file.nix +++ b/hosts/darp8/file.nix @@ -1,22 +1,16 @@ { cfg, config, context, pkgs, ... }: let - inherit (config.home) username homeDirectory; - mkSymlinkAttrs = import ../../utils/mkSymlinkAttrs.nix { inherit pkgs; inherit (cfg) context runtimeRoot; - hm = config.lib; # same as: cfg.context.inputs.home-manager.lib.hm; }; in { - imports = [ - ../graphical/file.nix # import shared configs - ]; + imports = [ ../graphical/file.nix ]; - # Symlink per-host dotfiles - home.file = mkSymlinkAttrs { + systemd.user.tmpfiles.rules = mkSymlinkAttrs { ".config/hypr/hypr-monitors.conf" = { source = ../../configs/hypr-darp8/hypr-monitors.conf; outOfStoreSymlink = true; diff --git a/hosts/darp8/pkgs.nix b/hosts/darp8/pkgs.nix index 25d6bb0..c092737 100644 --- a/hosts/darp8/pkgs.nix +++ b/hosts/darp8/pkgs.nix @@ -9,15 +9,11 @@ ]; # BEGIN PER-HOST PACKAGES - home.packages = with pkgs; [ + users.users.liamm.packages = with pkgs; [ android-studio genymotion praat mcpelauncher-ui-qt ]; - - # BEGIN PER-HOST PROGRAMS - programs = { - }; } diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index 892b49b..50ad801 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -4,7 +4,9 @@ imports = [ ./hardware-configuration.nix ../graphical/configuration.nix - inputs.home-manager.nixosModules.default + ./file.nix + ./pkgs.nix + ./services.nix ]; networking.hostName = "lmdesktop"; @@ -47,15 +49,6 @@ }; }; - home-manager = { - useGlobalPkgs = true; - extraSpecialArgs = { inherit inputs; inherit cfg; }; - users = { - "${cfg.username}" = import ./home.nix; - }; - backupFileExtension = ".bak"; - }; - # This option defines the first version of NixOS you have installed on this particular machine # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, # and migrated your data accordingly. diff --git a/hosts/desktop/file.nix b/hosts/desktop/file.nix index fd9b5d0..d1487fd 100644 --- a/hosts/desktop/file.nix +++ b/hosts/desktop/file.nix @@ -1,22 +1,17 @@ { cfg, config, context, pkgs, ... }: let - inherit (config.home) username homeDirectory; - mkSymlinkAttrs = import ../../utils/mkSymlinkAttrs.nix { inherit pkgs; inherit (cfg) context runtimeRoot; - hm = config.lib; # same as: cfg.context.inputs.home-manager.lib.hm; }; in { - imports = [ - ../graphical/file.nix # import shared configs - ]; + imports = [ ../graphical/file.nix ]; # Symlink per-host ddtfiles - home.file = mkSymlinkAttrs { + systemd.user.tmpfiles.rules = mkSymlinkAttrs { ".config/hypr/hypr-monitors.conf" = { source = ../../configs/hypr-desktop/hypr-monitors.conf; outOfStoreSymlink = true; diff --git a/hosts/desktop/pkgs.nix b/hosts/desktop/pkgs.nix index ee6f5df..a994025 100644 --- a/hosts/desktop/pkgs.nix +++ b/hosts/desktop/pkgs.nix @@ -9,7 +9,7 @@ ]; # BEGIN PER-HOST PACKAGES - home.packages = with pkgs; [ + users.users.liamm.packages = with pkgs; [ android-studio genymotion fred @@ -19,9 +19,5 @@ shotcut nvtopPackages.nvidia ]; - - # BEGIN PER-HOST PROGRAMS - programs = { - }; } diff --git a/hosts/graphical/configuration.nix b/hosts/graphical/configuration.nix index 7f578a5..b82d823 100644 --- a/hosts/graphical/configuration.nix +++ b/hosts/graphical/configuration.nix @@ -2,6 +2,7 @@ { imports = [ inputs.dms.nixosModules.greeter + inputs.dms.nixosModules.dank-material-shell ]; boot = { @@ -47,25 +48,6 @@ }; services = { - # for iphone screencasting - # avahi = { - # enable = true; - # nssmdns4 = true; - # publish = { - # enable = true; - # userServices = true; - # }; - # }; - - # greetd = { - # enable = true; - # restart = true; - # # settings = { - # # default_session = { - # # command = "${pkgs.tuigreet}/bin/tuigreet --cmd start-hyprland"; - # # }; - # # }; - # }; displayManager.dms-greeter = { enable = true; compositor.name = "hyprland"; @@ -73,6 +55,9 @@ package = inputs.dms.packages.${pkgs.stdenv.hostPlatform.system}.default; }; + gnome.gnome-keyring.enable = true; + + libinput.enable = true; blueman.enable = true; gvfs.enable = true; @@ -82,13 +67,7 @@ }; security.pam.services.hyprlock = {}; - # environment = { - # etc = { - # "greetd/environments".text = '' - # Hyprland - # ''; - # }; - # }; + security.pam.services.login.enableGnomeKeyring = true; fonts = { packages = with pkgs; [ @@ -96,12 +75,7 @@ noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-color-emoji - # liberation_ttf - # fira-code-symbols mplus-outline-fonts.githubRelease - # dina-font - # nerd-fonts.fira-code - # nerd-fonts.droid-sans-mono ]; fontconfig = { @@ -137,6 +111,21 @@ }; programs = { + bash = { + completion.enable = true; + promptInit = '' + if [[ -z $ORIG_SHLVL ]]; then + export ORIG_SHLVL=$SHLVL + fi + + if [[ $SHLVL -gt $ORIG_SHLVL ]]; then + export PS1='\[\e[1;m\e[1;33m\e[1;m\] ($(($SHLVL - $ORIG_SHLVL))) \W\[\e[m\e[m\] 🐧 \[\e[1;32m\]~> \[\e[m\e[m\]' + else + export PS1='\[\e[1;m\e[1;33m\e[1;m\] \W\[\e[m\e[m\] 🐧 \[\e[1;32m\]~> \[\e[m\e[m\]' + fi + ''; + }; + steam = { enable = true; remotePlay.openFirewall = true; @@ -152,15 +141,9 @@ plugins = [ ]; }; - # dank-material-shell.greeter = { - # enable = true; - # compositor.name = "hyprland"; - # configHome = "${cfg.homeDirectory}"; - # }; - # river-classic = { - # enable = true; - # xwayland.enable = true; - # }; + dank-material-shell = { + enable = true; + }; gnupg.agent = { enable = true; @@ -180,11 +163,11 @@ mtr.enable = true; }; + # maybe delete? lib.inputMethod.fcitx5.waylandFrontend = true; environment.systemPackages = with pkgs; [ bat - # bolt discord fd file @@ -196,13 +179,9 @@ libnotify mesa neovim - # qmk ripgrep spotify unzip - # usbutils - # uxplay - # vial vim waypipe wget @@ -211,7 +190,12 @@ zip ]; - environment.sessionVariables = {}; + environment.sessionVariables = { + EDITOR = "focus"; + GIT_EDITOR = "nvim"; + NIX_SHELL_PRESERVE_PROMPT = "1"; + NIX_CONFIG_DIR = "/home/liamm/nixos"; + }; zramSwap = { enable = true; diff --git a/hosts/graphical/file.nix b/hosts/graphical/file.nix index 71ab037..b5f9908 100644 --- a/hosts/graphical/file.nix +++ b/hosts/graphical/file.nix @@ -1,18 +1,14 @@ { cfg, config, context, pkgs, ... }: let - inherit (config.home) username homeDirectory; - mkSymlinkAttrs = import ../../utils/mkSymlinkAttrs.nix { inherit pkgs; inherit (cfg) context runtimeRoot; - hm = config.lib; # same as: cfg.context.inputs.home-manager.lib.hm; }; in { - # Symlink shared dotfiles - home.file = mkSymlinkAttrs { + systemd.user.tmpfiles.rules = mkSymlinkAttrs { # Fonts ".local/share/fonts" = { source = ../../fonts; @@ -76,6 +72,12 @@ in outOfStoreSymlink = true; recursive = true; }; + ".config/git" = { + source = ../../configs/git; + outOfStoreSymlink = true; + recursive = true; + }; + ".config/user-dirs.dirs" = { source = ../../configs/user-dirs.dirs; outOfStoreSymlink = true; @@ -86,5 +88,15 @@ in outOfStoreSymlink = true; recursive = false; }; + ".bashrc" = { + source = ../../configs/bash/bashrc; + outOfStoreSymlink = true; + recursive = false; + }; + ".gnupg/gpg-agent.conf" = { + source = ../../configs/gnupg/gpg-agent.conf; + outOfStoreSymlink = true; + recursive = false; + }; }; } diff --git a/hosts/graphical/pkgs.nix b/hosts/graphical/pkgs.nix index 3ac70d0..225bbce 100644 --- a/hosts/graphical/pkgs.nix +++ b/hosts/graphical/pkgs.nix @@ -5,18 +5,20 @@ { # BEGIN PACKAGES - home.packages = with pkgs; [ + users.users.liamm.packages = with pkgs; [ adw-gtk3 arc-icon-theme audacity bibata-cursors brave btop + diff-so-fancy emacs-all-the-icons-fonts emacs-gtk emacsPackages.pdf-tools exfatprogs fastfetch + feh ffmpeg floorp-bin focus @@ -39,6 +41,7 @@ mupdf nwg-displays nwg-look + obs-studio openvpn prismlauncher signal-desktop @@ -51,65 +54,5 @@ wev zoom-us ]; - - # BEGIN PROGRAMS - programs = { - bash = { - enable = true; - enableCompletion = true; - enableVteIntegration = true; - initExtra ='' - if [[ -z $ORIG_SHLVL ]]; then - export ORIG_SHLVL=$SHLVL - fi; - if [[ $SHLVL -gt $ORIG_SHLVL ]]; then - export PS1='\[\e[1;m\e[1;33m\e[1;m\] ($(($SHLVL - $ORIG_SHLVL))) \W\[\e[m\e[m\] 🐧 \[\e[1;32m\]~> \[\e[m\e[m\]' - else - export PS1='\[\e[1;m\e[1;33m\e[1;m\] \W\[\e[m\e[m\] 🐧 \[\e[1;32m\]~> \[\e[m\e[m\]' - fi; - export PATH="$HOME/.local/bin:$PATH" - set -o vi - fastfetch - ''; - shellAliases = { - build = "./build.sh"; - emacsd = "emacs --daemon"; - emacsc = "emacsclient -c -a 'emacs'"; - gap = "git add -p"; - gcp = "git commit -p"; - kpx = "keepassxc-cli open"; - ls = "ls --color=auto"; - ll = "ls -l"; - la = "ls -lA"; - fastfetch = "fastfetch -c $HOME/.config/fastfetch/config.json"; - new = "source $HOME/.bashrc"; - newbar = "pkill waybar; waybar &disown"; - ping = "ping -c 5"; - vi = "\\vim"; - vim = "nvim"; - ".." = "cd .."; - }; - }; - dank-material-shell = { - enable = true; - }; - feh.enable = true; - git = { - enable = true; - lfs.enable = true; - signing.format = "openpgp"; - settings = { - user.email = "maloneliam@proton.me"; - user.name = "Liam Malone"; - }; - }; - obs-studio = { - enable = true; - }; - diff-so-fancy = { - enable = true; - enableGitIntegration = true; - }; - }; } diff --git a/hosts/graphical/services.nix b/hosts/graphical/services.nix index 4216add..3c0bba1 100644 --- a/hosts/graphical/services.nix +++ b/hosts/graphical/services.nix @@ -1,28 +1,46 @@ { pkgs, ... }: { - services = { - emacs = { - enable = true; - package = pkgs.emacs-gtk; - client = { - enable = true; - arguments = [ - "-c" - "-a emacs" - ]; - }; - startWithUserSession = "graphical"; + # Emacs daemon + systemd.user.services.emacs = { + description = "Emacs text editor"; + wantedBy = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + after = [ "graphical-session.target" ]; + serviceConfig = { + Type = "notify"; + ExecStart = "${pkgs.emacs-gtk}/bin/emacs --fg-daemon"; + ExecStop = "${pkgs.emacs-gtk}/bin/emacsclient --eval '(kill-emacs)'"; + TimeoutStartSec = "10min"; + Restart = "on-failure"; }; - - gpg-agent = { - enable = true; - defaultCacheTtl = 1800; - enableSshSupport = true; - }; - - gnome-keyring.enable = true; - mpris-proxy.enable = true; - nextcloud-client.enable = true; }; + + # Bluetooth media key proxy + systemd.user.services.mpris-proxy = { + description = "MPRIS proxy for Bluetooth media controls"; + wantedBy = [ "bluetooth.target" ]; + after = [ "bluetooth.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; + Restart = "on-failure"; + }; + }; + + # Nextcloud desktop client + systemd.user.services.nextcloud-client = { + description = "Nextcloud desktop sync client"; + wantedBy = [ "graphical-session.target" ]; + after = [ "graphical-session.target" "network-online.target" ]; + wants = [ "network-online.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.nextcloud-client}/bin/nextcloud --background"; + Restart = "on-failure"; + RestartSec = "5s"; + }; + }; + + # gnome-keyring and gpg-agent are handled at system level } diff --git a/modules/desktop/hyprland-desktop.nix b/modules/desktop/hyprland-desktop.nix deleted file mode 100644 index f9cd673..0000000 --- a/modules/desktop/hyprland-desktop.nix +++ /dev/null @@ -1,489 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - osConfig, - ... -}: - -{ - home.packages = with pkgs; [ - hyprpicker - hyprlock - hypridle - hyprpaper - hyprland-protocols - inputs.hyprsunset - # inputs.hyprsysteminfo - # hyprpolkit -- not in nixpkgs yet - ]; - - imports = [ - ./waybar.nix - ]; - - wayland.windowManager.hyprland = { - package = inputs.hyprland.packages.${pkgs.system}.hyprland; - enable = true; - xwayland.enable = true; - systemd = { - enable = true; - variables = [ - "--all" - ]; - }; - plugins = [ - inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo - ]; - settings = { - monitor = [ - "DP-1,2560x1440@144,0x0,1" - "HDMI-A-1,1920x1080@60,2560x80,1" - ]; - exec-once = [ - "wl-clipboard-history -t" - "wl-paste -p --watch wl-copy -p ''" - "fcitx5 -d" - ]; - env = [ - "WLR_NO_HARDWARE_CURSORS,1" - "HYPRCURSOR_THEME,${config.gtk.cursorTheme.name}" - "HYPRCURSOR_SIZE,24" - "XDG_CURRENT_DESKTOP,Hyprland" - "XDG_SESSION_TYPE,wayland" - "XDG_SESSION_DESKTOP,Hyprland" - "GTK_THEME,${config.gtk.theme.name}" - "QT_QPA_PLATFORM,xcb;Hyprland" - "XCURSOR_THEME,${config.gtk.cursorTheme.name}" - "XCURSOR_SIZE,24" - ]; - input = { - kb_layout = "us"; - kb_variant = ""; - kb_model = ""; - kb_options = ""; - kb_rules = ""; - - follow_mouse = 1; - numlock_by_default = true; - - touchpad = { - disable_while_typing = true; - natural_scroll = true; - middle_button_emulation = true; - scroll_factor = 0.5; - drag_lock = false; - tap-to-click = true; - }; - sensitivity = 0; - }; - general = { - gaps_in = 2; - gaps_out = 4; - border_size = 2; - "col.active_border" = "rgba(881798FF)"; - "col.inactive_border" = "rgba(471520FF)"; - layout = "dwindle"; - }; - - debug = { - disable_logs = false; - }; - - misc = { - disable_hyprland_logo = false; - disable_splash_rendering = false; - mouse_move_enables_dpms = true; - key_press_enables_dpms = true; - }; - - decoration = { - rounding = 10; - blur = { - enabled = true; - size = 3; - passes = 1; - xray = true; - new_optimizations = "on"; - }; - - shadow = { - enabled = true; # formerly drop_shadow - range = 4; - render_power = 3; - color = "rgba(1a1a1aee)"; - }; - }; - - animations = { - enabled = true; - - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, default" - ]; - }; - - dwindle = { - pseudotile = true; - preserve_split = true; - }; - - gestures = { - workspace_swipe = true; - workspace_swipe_forever = true; - }; - - windowrule = [ - "idleinhibit fullscreen, firefox" - "idleinhibit fullscreen, floorp" - "idleinhibit fullscreen, ghostty" - "idleinhibit focus, firefox" - "idleinhibit focus, floorp" - "idleinhibit focus, mpv" - "idleinhibit focus, ^(emacs)$" - "idleinhibit focus, ^(Emacs)$" - "idleinhibit focus, ^(discord)$" - "idleinhibit focus, ^(Discord)$" - "idleinhibit focus, ^(spotify)$" - "float, polkit-kde-authentication-agent-1" - "float, ^(praat)$" - "float, ^(network)$" - "float, ^(nm-)$" - "float, ^(Network)$" - "float, Rofi" - "float, Gimp" - "float, Nautilus" - "float, notification" - "float, ^(launcher)$" - "tile, Spotify" - "tile, Minecraft" - "workspace 2, KeePassXC" - "workspace 3, firefox" - "workspace 3, floorp" - "workspace 4, Spotify" - "workspace 6, discord" - "workspace 6, Signal" - "workspace 10, Minecraft" - ]; - - "$mainMod" = "SUPER"; - "$altMod" = "ALT"; - "$ctrlMod" = "CTRL"; - - - # used for screenshots - "$screenshotarea" = "hyprctl keyword animation 'fadeOut,0,0,default'; grimblast --notify copy area; hyprctl keyword animation 'fadeOut,1,4,default'"; - # for locking screen - "$lock" = "hyprlock"; - - bind = [ - # Program binds - "$mainMod, grave, hyprexpo:expo, toggle" # can be: toggle, off/disable or on/enable - "$altMod, Return, exec, ghostty" - "$mainMod, Return, exec, GDK_BACKEND=x11 ghostty" # Until NixOS Fixes EGL Drivers - "$altMod SHIFT, Return, exec, alacritty" - "$mainMod SHIFT, D, exec, discord --enable-blink-features=MiddleClickAutoscroll" - "$mainMod SHIFT, E, exec, emacsclient -c -a 'emacs'" - "$mainMode SHIFT, F, exec, focus-linux" - "$mainMod, SPACE, exec, pkill wofi || wofi" - "$mainMod, E, exec, nautilus" - "$mainMod, S, exec, spotify" - "$mainMod, P, exec, hyprpicker -a -f hex" - - # Screenshot - ", Print, exec, $screenshotarea" - "SHIFT, Print, exec, grimblast --notify --cursor copy output" - - # WM management binds - "$mainMod SHIFT, P, pseudo," # dwindle - "$mainMod, C, killactive," - "$mainMod control, Q, exec, $lock" - "$mainMod, F4, exit," - "$mainMod, V, togglefloating, " - "$mainMod SHIFT, S, togglesplit," # dwindle - "$mainMod, F, fullscreen," - - - "$mainMod, H, movefocus, l" - "$mainMod, L, movefocus, r" - "$mainMod, K, movefocus, u" - "$mainMod, J, movefocus, d" - "$mainMod, comma, focusmonitor, -1" - "$mainMod, period, focusmonitor, +1" - - "$mainMod SHIFT, H, movewindow, l" - "$mainMod SHIFT, L, movewindow, r" - "$mainMod SHIFT, K, movewindow, u" - "$mainMod SHIFT, J, movewindow, d" - "$mainMod SHIFT, comma, movecurrentworkspacetomonitor, -1" - "$mainMod SHIFT, period, movecurrentworkspacetomonitor, +1" - - "$mainMod, right, resizeactive, 10 0" - "$mainMod, left, resizeactive, -10 0" - "$mainMod, up, resizeactive, 0 -10" - "$mainMod, down, resizeactive, 0 10" - - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" - - "$mainMod SHIFT, 1, movetoworkspace, 1" - "$mainMod SHIFT, 2, movetoworkspace, 2" - "$mainMod SHIFT, 3, movetoworkspace, 3" - "$mainMod SHIFT, 4, movetoworkspace, 4" - "$mainMod SHIFT, 5, movetoworkspace, 5" - "$mainMod SHIFT, 6, movetoworkspace, 6" - "$mainMod SHIFT, 7, movetoworkspace, 7" - "$mainMod SHIFT, 8, movetoworkspace, 8" - "$mainMod SHIFT, 9, movetoworkspace, 9" - "$mainMod SHIFT, 0, movetoworkspace, 10" - "$mainMod SHIFT CTRL, right, movetoworkspace, +1" - "$mainMod SHIFT CTRL, left, movetoworkspace, -1" - - # Scroll through existing workspaces with mainMod + scroll - "$mainMod, mouse_down, workspace, e+1" - "$mainMod, mouse_up, workspace, e-1" - - # Tab through existing workspaces - "$mainMod, Tab, workspace, e+1" - "$mainMod SHIFT, Tab, workspace, e-1" - - "$mainMod CTRL, right, workspace, +1" - "$mainMod CTRL, left, workspace, -1" - ]; - - bindl = [ - ", XF86AudioPlay, exec, playerctl play-pause" - ", XF86AudioNext, exec, playerctl next" - ", XF86AudioPrev, exec, playerctl previous" - ]; - - bindel = [ - ", XF86AudioRaiseVolume, exec, pamixer -i 5 && ${../scripts/progress-notify.sh} audio" - ", XF86AudioLowerVolume, exec, pamixer -d 5 && ${../scripts/progress-notify.sh} audio" - ", XF86AudioMute, exec, pamixer -t && ${../scripts/progress-notify.sh} mute" - ]; - - binde = [ - ", XF86MonBrightnessDown, exec, brightnessctl set 10%- && ${../scripts/progress-notify.sh} brightness" - ", XF86MonBrightnessUp, exec, brightnessctl set 10%+ && ${../scripts/progress-notify.sh} brightness" - ]; - - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - }; - extraConfig = '' - bind = $mainMod, R, submap, resize - submap = resize - bind=, escape,submap,reset - - binde=, left, resizeactive, -10 0 - bindr=, left, submap, reset - binde=, right, resizeactive, 10 0 - bindr=, right, submap, reset - binde=, up, resizeactive, 0 10 - bindr=, up, submap, reset - binde=, down, resizeactive, 0 -10 - bindr=, down, submap, reset - - binde=, H, resizeactive, -10 0 - bindr=, H, submap, reset - binde=, J, resizeactive, 0 -10 - bindr=, J, submap, reset - binde=, K, resizeactive, 0 10 - bindr=, K, submap, reset - binde=, L, resizeactive, 10 0 - bindr=, L, submap, reset - - submap=reset - - bind = $mainMod, B, submap, browser_select - submap = browser_select - - bind =, B, exec, brave --enable-blink-features=MiddleClickAutoscroll - bind =, B, submap, reset - - bind = SHIFT, F, exec, firefox - bind = SHIFT, F, submap, reset - - bind =, F, exec, floorp - bind =, F, submap, reset - - bind =, C, exec, floorp -p limalone -no-remote - bind =, C, submap, reset - - bind=, escape,submap,reset - submap=reset - - bind = $mainMod SHIFT, V, submap, video_stuff - submap = video_stuff - bind = , O, exec, obs - bind = , O, submap, reset - bind = , V, exec , kdenlive - bind = , V, submap, reset - - bind=, escape,submap,reset - submap = reset - - plugin { - hyprexpo { - columns = 3 - gapSize = 4 - workspace_method = "center current" - enable_gesture = true - gesture_distance = 300 - gesture_negative = true - } - } - ''; - }; - - lib.inputMethod.fcitx5.waylandFrontend = true; - - programs = { - hyprlock = { - enable = true; - settings = { - general = { - disable_loading_bar = true; - hide_cursor = true; - no_fade_in = false; - }; - background = [ - { - path = "~/pictures/.wallpapers/bloody_snow.jpg"; - blur_passes = 2; - blur_size = 8; - } - ]; - input-field = [ - { - monitor = ""; - size = "200, 30"; - outline_thickness = 3; - dots_size = 0.33; - dots_spacing = 0.15; - dots_center = false; - outer_color = "#fe0b00"; - inner_color = "#0c0c0c"; - font_color = "#efefef"; - fade_on_empty = true; - check_color = "#0eff0d"; - fail_color = "#ff009e"; - capslock_color = "#bb00ee"; - placeholder_text = "Input Password..."; - fail_text = "$FAIL ($ATTEMPTS)"; - } - ]; - label = [ - { - monitor = ""; - text = "$TIME"; - text_align = "center"; - color = "#ffffee"; - font_size = 28; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "0, 80"; - halign = "center"; - valign = "center"; - } - { - monitor = ""; - text = "cmd[update:1000] echo \" $(date +'%A, %b %d %Y')\""; - text_align = "center"; - color = "#ffffee"; - font_size = 18; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "80, 80"; - halign = "left"; - valign = "bottom"; - } - { - monitor = ""; - text = "cmd[update:1000] echo \"󰁿$(cat /sys/class/power_supply/BAT0/capacity)\""; - text_align = "center"; - color = "#ffffee"; - font_size = 18; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "80, 80"; - halign = "right"; - valign = "bottom"; - } - ]; - }; - }; - }; - - services = { - hyprpaper = { - enable = true; - settings = { - ipc = "on"; - splash = false; - preload = [ - "~/pictures/.wallpapers/skyline-view.png" - "~/pictures/.wallpapers/iceland-winter-mountains.jpg" - ]; - wallpaper = [ - ",~/pictures/.wallpapers/iceland-winter-mountains.jpg" - ]; - }; - }; - hypridle = { - enable = true; - settings = { - general = { - lock_cmd = "${pkgs.procps}/bin/pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple sessions - before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; # lock before suspend. - after_sleep_cmd = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # to avoid having to hit key twice to turn on display - }; - listeners = [ - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -r"; # monitor backlight restor. - } - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -sd rgb:kbd_backlight set 0"; # turn off keyboard backlight. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -rd rgb:kbd_backlight"; # turn on keyboard backlight. - } - { - timeout = 180; - on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock screen when timeout has passed - } - { - timeout = 300; - on-timeout = "${pkgs.hyprland}/bin/hyprctl dispatch dpms off"; # screen off when timeout has passed - on-resume = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired. - } - { - timeout = 300; - on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # suspend pc - } - ]; - }; - }; - }; -} diff --git a/modules/desktop/waybar.css b/modules/desktop/waybar.css deleted file mode 100644 index ae8b78b..0000000 --- a/modules/desktop/waybar.css +++ /dev/null @@ -1,345 +0,0 @@ -@define-color white #F2F2F2; -@define-color black #000203; -@define-color text #BECBCB; -@define-color lightgray #686868; -@define-color darkgray #353535; -@define-color red #C50F1F; -@define-color orange #FFC251; -@define-color blue #00FFB2; -@define-color magenta #f5c2e7; -@define-color archbtw #1793d1; -@define-color purple #881798; -@define-color green #00BB00; -@define-color lightgreen #93C863; - -@define-color black-transparent-1 rgba(0, 0, 0, 0.1); -@define-color black-transparent-2 rgba(0, 0, 0, 0.2); -@define-color black-transparent-3 rgba(0, 0, 0, 0.3); -@define-color black-transparent-4 rgba(0, 0, 0, 0.4); -@define-color black-transparent-5 rgba(0, 0, 0, 0.5); -@define-color black-transparent-6 rgba(0, 0, 0, 0.6); -@define-color black-transparent-7 rgba(0, 0, 0, 0.7); -@define-color black-transparent-8 rgba(0, 0, 0, 0.8); -@define-color black-transparent-9 rgba(0, 0, 0, 0.9); -@define-color black-solid rgba(0, 0, 0, 1.0); - -* { - font-family: Iosevka, Material Design Icons Desktop; - font-weight: bold; - font-size: 16px; - border: none; - border-radius: 0; -} -/* -* { - border: none; - border-radius: 0; - font-family: Cartograph CF Nerd Font, monospace; - font-weight: bold; - font-size: 16px; - min-height: 0; -} - */ - -#window { - background-color: @black-transparent-4; - padding: 2px 2px; - border-radius: 6px; - border: none; - margin-left: 30px; - margin-right: 30px; -} - -window#waybar { - background: transparent; - color: @text; - border-radius: 7px; - border: none; -} - - -tooltip { - background: @black-transparent-9; - border: 1px solid @lightgreen; - border-radius: 7px; -} - -tooltip label { - color: @text; -} - -.modules-left { - background: @black-transparent-8; - border-radius: 8px; - border: 2px solid @lightgreen; - margin-left: 2px; - margin-right: 2px; - padding: 2px 4px; -} - -.modules-right { - background: @black-transparent-8; - border-radius: 8px; - border: 2px solid @lightgreen; - margin-left: 2px; - margin-right: 2px; - padding: 2px 4px; -} - -#tags { -} - -#tags button { - background-color: transparent; - color: @lightgray; - padding: 0; - /* margin: 0; */ - margin-top: 3px; - margin-bottom: 3px; - /* margin-left: 1px; - margin-right: 1px; */ - border-radius: 6px; - transition: all 0.3s ease; -} - -#tags button:hover { - box-shadow: inherit; - text-shadow: inherit; - background: @lightgray; - border: 1px solid rgba(0, 0, 0, 0.0); - color: @white; - transition: all 0.3s ease; -} - -#tags button.focused { - /* background-color: @darkgray; */ - /* border: 1px solid @darkgray; */ - color: @white; - transition: all 0.3s ease; - animation: colored-gradient 10s ease infinite; -} - -#tags button.urgent { - background-color: @red; - color: @black; - transition: all 0.3s ease; -} - - - -#workspaces { - /* border: 1px solid #10171b; */ - /* border-radius: 20px; */ - /* margin-top: 0; */ - /* margin-bottom: 0; */ - margin-left: 2px; - margin-right: 2px; -} - -#workspaces button { - color: @lightgray; - padding: 0px 3px; - /* margin: 0; */ - margin-top: 3px; - margin-bottom: 3px; - /* margin-left: 1px; - margin-right: 1px; */ - border-radius: 6px; - transition: all 0.3s ease; -} - -#workspaces button:hover { - box-shadow: inherit; - text-shadow: inherit; - background: transparent; - border: 1px solid rgba(0, 0, 0, 0.0); - color: @white; - transition: all 0.3s ease; -} - -#workspaces button.focused, -#workspaces button.active { - /* background-color: @darkgray; */ - /* border: 1px solid @darkgray; */ - color: @white; - transition: all 0.3s ease; - animation: colored-gradient 10s ease infinite; -} - -#workspaces button.focused:hover, -#workspaces button.active:hover { - background-color: @darkgray; - transition: all 1s ease; -} - -#workspaces button.urgent { - background-color: @red; - color: @black; - transition: all 0.3s ease; -} - -/* #workspaces button.hidden {} */ - -#taskbar { - border-radius: 2px; - margin-top: 4px; - margin-bottom: 4px; - margin-left: 1px; - margin-right: 1px; -} - -#taskbar button { - color: @text; - padding: 4px 8px; - margin-left: 5px; - margin-right: 5px; -} - -#taskbar button:hover { - background: transparent; - border: 1px solid @lightgray; - border-radius: 8px; - transition: all 0.3s ease; - animation: colored-gradient 10s ease infinite; -} - -/* #taskbar button.maximized {} */ - -/* #taskbar button.minimized {} */ - -#taskbar button.active { - border: 1px solid @darkgray; - border-radius: 8px; - transition: all 0.3s ease; - animation: colored-gradient 10s ease infinite; -} - -#custom-kernel { - margin-top: 2px; - margin-left: 2px; - margin-bottom: 2px; - border-radius: 8px; - color: @magenta; -} - -#custom-wofi { - color: @green; - margin-left: 4px; - margin-right: 4px; - padding: 0px 4px; -} - -#keyboard-state { - color: @text; - padding: 0px 3px; - margin-left: 2px; - margin-right: 2px; -} - -#tray { - background-color: @black-transparent-6; - padding: 0px 0px; - margin-right: 6px; - border-radius: 8px; - border: 2px solid @black; -} - -#tray > .passive { - -gtk-icon-effect: dim; -} - -#tray > .needs-attention { - -gtk-icon-effect: highlight; - background-color: @red; -} - -#custom.separator { - color: @text; -} - -#battery { - color: @text; -} - -#battery.charging { - color: @green; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -#battery.discharging.good { - color: @white; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -#battery.discharging.warning { - color: @orange; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -#battery.discharging.critical { - color: @red; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -#pulseaudio.audio { - color: @text; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -#clock { - color: @text; - margin-left: 2px; - margin-right: 2px; - padding: 4px 4px; -} - -/* -------------------------------------------------------------------------------- */ -/* If workspaces is the leftmost module, omit left margin */ - -.modules-left > widget:first-child > #workspaces button, -.modules-left > widget:first-child > #taskbar button, -.modules-left > widget:first-child > #custom-launcher, -.modules-left > widget:first-child > #window, -.modules-left > widget:first-child > #tray, -.modules-left > widget:first-child > #cpu, -.modules-left > widget:first-child > #memory, -.modules-left > widget:first-child > #backlight, -.modules-left > widget:first-child > #pulseaudio.audio, -.modules-left > widget:first-child > #pulseaudio.microphone, -.modules-left > widget:first-child > #network.enp46s0, -.modules-left > widget:first-child > #bluetooth, -.modules-left > widget:first-child > #battery, -.modules-left > widget:first-child > #clock, -.modules-left > widget:first-child > #custom-notification { - margin-left: 8px; -} - -.modules-right > widget:last-child > #workspaces button, -.modules-right > widget:last-child > #taskbar button, -.modules-right > widget:last-child > #custom-launcher, -.modules-right > widget:last-child > #window, -.modules-right > widget:last-child > #tray, -.modules-right > widget:last-child > #cpu, -.modules-right > widget:last-child > #memory, -.modules-right > widget:last-child > #backlight, -.modules-right > widget:last-child > #pulseaudio.audio, -.modules-right > widget:last-child > #pulseaudio.microphone, -.modules-right > widget:last-child > #network.enp46s0, -.modules-right > widget:last-child > #bluetooth, -.modules-right > widget:last-child > #battery, -.modules-right > widget:last-child > #clock, -.modules-right > widget:last-child > #custom-notification { - margin-right: 8px; -} - -/* -------------------------------------------------------------------------------- */ diff --git a/modules/desktop/waybar.nix b/modules/desktop/waybar.nix deleted file mode 100644 index a95ca4d..0000000 --- a/modules/desktop/waybar.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ - inputs, - lib, - config, - pkgs, - ... -}: - -{ - programs.waybar = { - enable = true; - systemd.enable = true; - systemd.target = "hyprland-session.target"; - style = '' - ${builtins.readFile ./waybar.css} - ''; - settings = { - mainBar = { - layer = "top"; - position = "top"; - height = 30; - margin-top = 2; - margin-bottom = 2; - margin-left = 2; - margin-right = 2; - - modules-left = [ - "custom/kernel" - "keyboard-state" - "custom/wofi" - "hyprland/workspaces" - ]; - - modules-center = [ - "hyprland/window" - ]; - - modules-right = [ - "tray" - "custom/separator" - "battery" - "pulseaudio#audio" - "clock" - ]; - - "custom/kernel" = { - exec = "uname -r | sed 's/-a.*//p'"; - format = " {}"; - interval = "once"; - }; - - "keyboard-state" = { - capslock = true; - format = "{icon}"; - format-icons = { - unlocked = ""; - locked = ""; - }; - }; - - "custom/wofi" = { - format = ""; - on-click = "pkill wofi || wofi --show drun"; - tooltip = false; - }; - - "hyprland/workspaces" = { - disable-scroll = true; - all-outputs = false; - on-click = "activate"; - format = "{icon}"; - persistent-workspaces = { - "*" = 5; - }; - format-icons = { - "1" = "I"; - "2" = "II"; - "3" = "III"; - "4" = "IV"; - "5" = "V"; - "6" = "VI"; - "7" = "VII"; - "8" = "VIII"; - "9" = "IX"; - "10" = "X"; - }; - }; - - "hyprland/window" = { - format = "{}"; - separate-outputs = false; - }; - - "tray" = { - icon-size = 18; - spacing = 8; - }; - - "custom/separator" = { - format = " | "; - }; - - "battery" = { - interval = 1; - states = { - good = 90; - warning = 30; - critical = 15; - }; - format = "{icon} {capacity}%"; - format-charging = "󰂄 {capacity}%"; - format-plugged = "󱘖 {capacity}%"; - format-icons = [ - "󰁺" - "󰁻" - "󰁼" - "󰁽" - "󰁾" - "󰁿" - "󰂀" - "󰂁" - "󰂂" - "󰁹" - ]; - on-click = ""; - on-update = "exec ${../scripts/battery-warn.sh} 255"; - tooltip = true; - }; - - "pulseaudio#audio" = { - format = "{icon} {volume}%"; - format-muted = "󰖁 {volume}%"; - format-bluetooth = "󰂯{icon} {volume}%"; - format-bluetooth-muted = "󰂯󰖁 {volume}%"; - format-icons = { - headphone = "󰋋"; - hand-free = "󰋋"; - headset = "󰋋"; - phone = ""; - portable = ""; - car = ""; - default = [ - "󰕿" - "󰖀" - "󰕾" - ]; - }; - on-click = "pamixer -t && exec ${../scripts/progress-notify.sh} mute"; - on-click-right = "pavucontrol"; - on-scroll-down = "pamixer -d 5 && exec ${../scripts/progress-notify.sh} audio"; - on-scroll-up = "pamixer -i 5 && exec ${../scripts/progress-notify.sh} audio"; - tooltip = true; - tooltip-format = "{icon} {desc} {volume}%"; - }; - - "clock" = { - interval = 1; - format = "{:%d/%m, 󰥔 %R}"; - tooltip-format = "{:%Y %B}\n{calendar}"; - }; - }; - }; - }; -} diff --git a/modules/home-manager/dunst.nix b/modules/home-manager/dunst.nix deleted file mode 100644 index 8f4062f..0000000 --- a/modules/home-manager/dunst.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.dunst = { - enable = true; - settings = { - global = { - offset = "4x4"; - frame_color = "#881798"; - gap_size = 2; - corner_radius = 10; - frame_width = 2; - font = "FiraCodeNerdFont"; - enable_recursive_icon_lookup = true; - icon_theme = "Arc"; - }; - - urgency_low = { - background = "#050D0E"; - foreground = "#ecefee"; - timeout = 5; - }; - urgency_normal = { - background = "#050D0E"; - foreground = "#ecefee"; - timeout = 5; - }; - urgency_high = { - background = "#cc474f"; - foreground = "#eceffe"; - timeout = 5; - }; - - volume_rule = { - appname = "volume_indicator"; - background = "#050D0E88"; - foreground = "#ecefee"; - timeout = 1; - }; - brightness_rule = { - appname = "brightness_indicator"; - background = "#050D0E88"; - foreground = "#ecefee"; - timeout = 1; - }; - }; - }; -} diff --git a/modules/home-manager/fastfetch.nix b/modules/home-manager/fastfetch.nix deleted file mode 100644 index 1dce030..0000000 --- a/modules/home-manager/fastfetch.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ pkgs, ... }: - -{ - programs.fastfetch = { - enable = true; - settings = { - logo = { - # source = "nixos"; - source = "$HOME/pictures/smol-penguin.png"; - type = "kitty"; - # width = 18; - # height = 9; - # color = { - # "1" = "white"; - # "2" = "green"; - # }; - padding = { - top = 1; # put this on 2 for picture source - left = 1; - right = 2; - }; - }; - display = { - separator = " -> "; - color = { - keys = "green"; - }; - }; - modules = [ - "title" - { - type = "custom"; - format = "────────── Env ──────────"; - color = "green"; - } - { - type = "os"; - key = "OS "; - } - { - type = "wm"; - key = "WM "; - } - "editor" - "break" - { - type = "custom"; - format = "────────── Sys ──────────"; - } - "cpu" - "gpu" - { - type = "memory"; - key = "MEM"; - } - "vulkan" - "disk" - "battery" - { - type = "custom"; - format = "─────────────────────────"; - } - "break" - "colors" - "break" - ]; - }; - }; -} diff --git a/modules/nvidia.nix b/modules/nvidia.nix deleted file mode 100644 index 5133540..0000000 --- a/modules/nvidia.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ ... } - -programs.hyprland.nvidiaPatches = enable; - -environment.sessionVariables = { - NIXOS_OZONE_WL = "1"; -}; - -hardware = { - opengl.enable = true; - nvidia.modesetting.enable = true; -}; diff --git a/utils/mkSymlinkAttrs.nix b/utils/mkSymlinkAttrs.nix index e1ecb90..e3a9819 100644 --- a/utils/mkSymlinkAttrs.nix +++ b/utils/mkSymlinkAttrs.nix @@ -1,69 +1,48 @@ -# Taken from: https://github.com/urob/dotfiles/blob/main/lib/mkSymlinkAttrs.nix +# Original taken from: https://github.com/urob/dotfiles/blob/main/lib/mkSymlinkAttrs.nix -# This function adds and interpretes outOfStoreSymlink option to home.file attribute sets. +# Rewritten for systemd.user.tmpfiles.rules — no home-manager dependency. +# Output: flat list of tmpfiles rule strings, assign to systemd.user.tmpfiles.rules # -# Usage: -# home.file = mkSymlinkAttrs { -# .foo = { source = "foo"; outOfStoreSymlink = true; recursive = true; }; -# .bar = { source = "foo/bar"; outOfStoreSymlink = true; }; +# Usage (unchanged from before): +# systemd.user.tmpfiles.rules = mkSymlinkAttrs { +# ".config/hypr" = { source = ./configs/hypr; outOfStoreSymlink = true; recursive = true; }; +# ".config/ghostty/config" = { source = ./configs/ghostty/config; outOfStoreSymlink = true; }; # }; -{ pkgs, hm, context, runtimeRoot, ... }: + +{ pkgs, context, runtimeRoot, ... }: let inherit (pkgs) lib; - # Swap a path inside the nix store with the same path in runtimeRoot + # Quote a path if it contains spaces so tmpfiles.d parses it as a single token + q = p: if builtins.match ".* .*" p != null then "\"${p}\"" else p; + + # Translate a store path back to its runtimeRoot equivalent runtimePath = path: let - rootStr = toString context; # context is the `self` passed to flake outputs + rootStr = toString context; pathStr = toString path; in assert lib.assertMsg (lib.hasPrefix rootStr pathStr) "${pathStr} does not start with ${rootStr}"; runtimeRoot + lib.removePrefix rootStr pathStr; - # Make outOfStoreSymlink against runtimeRoot. This replicates - # config.lib.file.mkOutOfStoreSymlink as_mkOutOfStoreSymlink and wraps it to - # replace the target path in the nix store with the original target path - # inside runtimeRoot. This is necessary because flakes live in the nix store. - mkOutOfStoreSymlink = - let - _mkOutOfStoreSymlink = path: - let - pathStr = toString path; - name = hm.strings.storeFileName (baseNameOf pathStr); - in - pkgs.runCommandLocal name { } ''ln -s ${lib.strings.escapeShellArg pathStr} $out''; - in - file: _mkOutOfStoreSymlink (runtimePath file); + rule = dest: src: "L+ ${q dest} - - - - ${q src}"; - # Recursively make OutOfStoreSymlinks for all files inside path. - mkRecursiveOutOfStoreSymlink = path: link: - builtins.listToAttrs ( - map - (file: { - name = link + "${lib.removePrefix (toString path) (toString file)}"; - value = { source = mkOutOfStoreSymlink file; }; - }) - (lib.filesystem.listFilesRecursive path) - ); - - # Remove custom attributes from attribute set. - rmopts = attrs: builtins.removeAttrs attrs [ "source" "recursive" "outOfStoreSymlink" ]; - -in fileAttrs: lib.attrsets.concatMapAttrs - ( - name: value: - # Make outOfStoreSymlinks - if value.outOfStoreSymlink or false - then - if value.recursive or false +in fileAttrs: + lib.flatten (lib.mapAttrsToList + (name: value: + if value.outOfStoreSymlink or false then - lib.attrsets.mapAttrs - (_: attrs: attrs // rmopts value) - (mkRecursiveOutOfStoreSymlink value.source name) - else { "${name}" = { source = mkOutOfStoreSymlink value.source; } // rmopts value; } - # Handle all other cases as usual - else { "${name}" = value; } - ) - fileAttrs + if value.recursive or false + then + map (file: + let rel = lib.removePrefix (toString value.source) (toString file); + in rule "%h/${name}${rel}" (runtimePath file) + ) (lib.filesystem.listFilesRecursive value.source) + else + [ (rule "%h/${name}" (runtimePath value.source)) ] + else + lib.warn "mkSymlinkAttrs: ${name} is not outOfStoreSymlink, skipping" [] + ) + fileAttrs)