diff --git a/flake.lock b/flake.lock index 9b7960e..2e67993 100644 --- a/flake.lock +++ b/flake.lock @@ -260,27 +260,6 @@ } }, "flake-parts_3": { - "inputs": { - "nixpkgs-lib": [ - "nix-fast-build", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1736143030, - "narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_4": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_2" }, @@ -298,7 +277,7 @@ "type": "github" } }, - "flake-parts_5": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "nixThePlanet", @@ -473,7 +452,7 @@ }, "hercules-ci-effects": { "inputs": { - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_4", "nixpkgs": "nixpkgs_7" }, "locked": { @@ -767,28 +746,6 @@ "type": "github" } }, - "nix-fast-build": { - "inputs": { - "flake-parts": "flake-parts_3", - "nixpkgs": [ - "nixpkgs" - ], - "treefmt-nix": "treefmt-nix_2" - }, - "locked": { - "lastModified": 1736592044, - "narHash": "sha256-HkaJeIFgxncLm8MC1BaWRTkge9b1/+mjPcbzXTRshoM=", - "owner": "Mic92", - "repo": "nix-fast-build", - "rev": "906af17fcd50c84615a4660d9c08cf89c01cef7d", - "type": "github" - }, - "original": { - "owner": "Mic92", - "repo": "nix-fast-build", - "type": "github" - } - }, "nix-formatter-pack": { "inputs": { "nixpkgs": [ @@ -879,7 +836,7 @@ }, "nixThePlanet": { "inputs": { - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_3", "hercules-ci-effects": "hercules-ci-effects", "nixpkgs": "nixpkgs_8", "osx-kvm": "osx-kvm" @@ -1341,13 +1298,12 @@ "lix-eval-jobs": "lix-eval-jobs", "lix-module": "lix-module", "mobile-nixos": "mobile-nixos", - "nix-fast-build": "nix-fast-build", "nix-on-droid": "nix-on-droid", "nixDarwin": "nixDarwin", "nixThePlanet": "nixThePlanet", "nixosHardware": "nixosHardware", "nixpkgs": "nixpkgs_9", - "treefmt-nix": "treefmt-nix_3", + "treefmt-nix": "treefmt-nix_2", "vscode-server": "vscode-server" } }, @@ -1492,27 +1448,6 @@ } }, "treefmt-nix_2": { - "inputs": { - "nixpkgs": [ - "nix-fast-build", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1736154270, - "narHash": "sha256-p2r8xhQZ3TYIEKBoiEhllKWQqWNJNoT9v64Vmg4q8Zw=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "13c913f5deb3a5c08bb810efd89dc8cb24dd968b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "treefmt-nix_3": { "inputs": { "nixpkgs": [ "nixpkgs" diff --git a/flake.nix b/flake.nix index ff70299..34a3717 100644 --- a/flake.nix +++ b/flake.nix @@ -59,10 +59,6 @@ }; catppuccin.url = "github:catppuccin/nix"; emacs-overlay.url = "github:nix-community/emacs-overlay"; - nix-fast-build = { - url = "github:Mic92/nix-fast-build"; - inputs.nixpkgs.follows = "nixpkgs"; - }; }; outputs = diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index 047e4d3..19ac094 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -1016,26 +1016,41 @@ This is meant to be an helper to be called from the window manager." ;;; Experiments, remove from here - -(defun ccr/test () - "test" +(defun ccr/test (niri-socket) + "Select a window and focus it based on `niri msg` output." (interactive) - (with-selected-frame - (make-frame '((name . "Emacs Selector") - (minibuffer . only) - (fullscreen . 0) ; no fullscreen - (undecorated . t) ; remove title bar - ;;(auto-raise . t) ; focus on this frame - ;;(tool-bar-lines . 0) - ;;(menu-bar-lines . 0) - (internal-border-width . 10) - (width . 50) - (height . 10))) - (unwind-protect - (completing-read "ciao " '("foo" "bar" "pippo") nil t "") - (delete-frame)))) + (let* ((niri-output (ccr/niri-get-windows niri-socket)) + (display-list (mapcar (lambda (entry) + (let ((title (cdr (assoc 'title entry))) + (app-id (cdr (assoc 'app_id entry))) + (id (cdr (assoc 'id entry)))) + (cons (format "%s - %s" title app-id) id))) + niri-output))) + (with-selected-frame + (make-frame '((name . "Emacs Selector") + (minibuffer . only) + (fullscreen . 0) + (undecorated . t) + (internal-border-width . 10) + (width . 120) + (height . 20))) + (unwind-protect + (let* ((entry (completing-read "Select window: " (mapcar #'car display-list) nil t "")) + (entry-id (cdr (assoc entry display-list))) ;; Get the ID associated with the selected entry + (command (format "NIRI_SOCKET=\"%s\" niri msg action focus-window --id %s" niri-socket entry-id))) + (message command) + (shell-command command)) + (delete-frame))))) +(defun ccr/niri-get-windows (niri-socket) + "Esegue `niri msg --json windows` e parse l'output JSON in una alist." + (let* ((command (format "NIRI_SOCKET=\"%s\" niri msg --json windows" niri-socket)) + (output (shell-command-to-string command)) + (json-object-type 'alist) ; Usa alist per rappresentare gli oggetti JSON + (parsed-json (json-read-from-string output))) + parsed-json)) + (provide 'init) ;;; init.el ends here diff --git a/hmModules/gpg/default.nix b/hmModules/gpg/default.nix index a894c90..f245f26 100644 --- a/hmModules/gpg/default.nix +++ b/hmModules/gpg/default.nix @@ -2,25 +2,13 @@ { services.gpg-agent = { enable = true; - enableSshSupport = true; - extraConfig = - let - pinentryRofi = pkgs.writeShellApplication { - name = "pinentry-rofi-with-env"; - runtimeInputs = with pkgs; [ - coreutils - rofi-wayland - ]; - text = '' - "${pkgs.pinentry-rofi}/bin/pinentry-rofi" "$@" - ''; - }; - in - '' - allow-emacs-pinentry - allow-loopback-pinentry - pinentry-program ${pinentryRofi}/bin/pinentry-rofi-with-env - ''; + pinentryPackage = pkgs.pinentry-rofi.override { + rofi = pkgs.rofi-wayland; + }; + extraConfig = '' + allow-emacs-pinentry + allow-loopback-pinentry + ''; }; programs.gpg = { diff --git a/hmModules/hyprland/default.nix b/hmModules/hyprland/default.nix index 2596638..1958349 100644 --- a/hmModules/hyprland/default.nix +++ b/hmModules/hyprland/default.nix @@ -1,6 +1,7 @@ { config, pkgs, + lib, ... }: let @@ -52,29 +53,34 @@ in services.udiskie.enable = true; + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + package = pkgs.catppuccin-cursors; + name = "catppuccin-mocha-sapphire"; + size = 38; + }; + gtk = { enable = true; - # font.name = lib.mkForce "Sans,Symbols Nerd Font"; + theme = { + name = "Catppuccin-GTK-Purple-Dark-Compact"; + package = pkgs.magnetic-catppuccin-gtk.override { + accent = [ "purple" ]; + shade = "dark"; + size = "compact"; + }; + }; iconTheme = { name = "Adwaita"; package = pkgs.adwaita-icon-theme; }; - cursorTheme = { - name = "catppuccin-mocha-sapphire"; - package = pkgs.catppuccin-cursors; - size = 38; - }; }; qt = { enable = true; }; - home.file.".icons/catppuccin-mocha-sapphire" = { - source = "${pkgs.catppuccin-cursors.mochaSapphire}/share/icons/catppuccin-mocha-sapphire-cursors"; - recursive = true; - }; - wayland.windowManager.hyprland = { enable = true; plugins = with pkgs.hyprlandPlugins; [ diff --git a/hmModules/niri/config.kdl b/hmModules/niri/config.kdl index 7d25a06..43f7a4f 100644 --- a/hmModules/niri/config.kdl +++ b/hmModules/niri/config.kdl @@ -301,9 +301,18 @@ window-rule { } window-rule { - match app-id=r#"^Emacs Selector$"# + match title=r#"^Emacs Selector$"# + opacity 0.95 + open-floating true + open-focused true } +window-rule { + match title=r#"^bTop$"# + opacity 0.95 + open-floating true + open-focused true +} @@ -334,9 +343,9 @@ binds { Mod+M { spawn "emacsclient" "-c" "--eval" "(notmuch-search \"tag:new\")"; } Mod+G { spawn "emacsclient" "-c" "--eval" "(switch-to-buffer (gptel \"*ChatGPT*\"))"; } Mod+Shift+C { spawn "emacsclient" "-c" "--eval" "(org-roam-dailies-capture-today)"; } - Super+Alt+L { spawn "swaylock"; } + Mod+Alt+L { spawn "swaylock"; } Mod+Space { spawn "rofi" "-show" "menu" "-modi" "menu:rofi-power-menu"; } - + Mod+Ctrl+b { spawn "foot" "--title='bTop'" "-W" "210x60" "btop";} // Example volume keys mappings for PipeWire & WirePlumber. // The allow-when-locked=true property makes them work even when the session is locked. diff --git a/hmModules/swayidle/default.nix b/hmModules/swayidle/default.nix index ccd150b..4db2310 100644 --- a/hmModules/swayidle/default.nix +++ b/hmModules/swayidle/default.nix @@ -48,10 +48,4 @@ } ]; }; - - # Otherwise it will start only after Sway and will not work with Hyprland - systemd.user.services.swayidle = { - Unit.PartOf = lib.mkForce [ ]; - Install.WantedBy = lib.mkForce [ "graphical-session-pre.target" ]; - }; } diff --git a/hosts/default.nix b/hosts/default.nix index 9b4c7c9..b76a20d 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -14,20 +14,22 @@ deltaflyer = { nixpkgs = let - # keep in sync with https://github.com/NixOS/mobile-nixos/blob/development/pkgs.nix - rev = "44d0940ea560dee511026a53f0e2e2cde489b4d4"; + # keep in sync with https://github.com/mobile-nixos/mobile-nixos/blob/development/npins/sources.json + rev = "d3c42f187194c26d9f0309a8ecc469d6c878ce33"; in builtins.getFlake "github:NixOS/nixpkgs/${rev}"; extraHmModules = [ - # inputs.ccrEmacs.hmModules.default + inputs.catppuccin.homeManagerModules.catppuccin ]; vpn = { ip = "10.100.0.5"; publicKey = "6bzmBx2b5yzMdW0aK0KapoBesNcxTv5+qdo+pGmG+jc="; }; - homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; + # homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; extraModules = [ (import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-fajita"; }) + inputs.catppuccin.nixosModules.catppuccin + inputs.lix-module.nixosModules.default ]; secrets = { "deltaflyer-wireguard-private-key" = { }; diff --git a/hosts/deltaflyer/default.nix b/hosts/deltaflyer/default.nix index 70f479f..7e68982 100644 --- a/hosts/deltaflyer/default.nix +++ b/hosts/deltaflyer/default.nix @@ -30,6 +30,13 @@ # INSECURE STUFF FIRST # Users and hardcoded passwords. { + nixpkgs.overlays = [ + (prev: final: { + gcc7 = final.gcc; + gcc8 = final.gcc; + }) + ]; + users.users.root.password = "nixos"; # users.users.ccr.password = "1234"; @@ -66,11 +73,13 @@ "git" "shell" "helix" - "hyprland" + # "hyprland" + "niri" "emacs" "firefox" "mpv" "xdg" + "catppuccin" ]; extraGroups = [ "dialout" @@ -99,18 +108,18 @@ ccr.extraModules = [ { programs.fish.loginShellInit = '' - pgrep Hypr >/dev/null || exec dbus-run-session Hyprland - ''; - wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' - monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 - input { - touchdevice { - transform = 1 - } - } - bind = $mod, r, exec, rotate-screen hor - bind = $mod SHIFT, r, exec, rotate-screen ver + pgrep niri >/dev/null || exec niri-session ''; + # wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' + # monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 + # input { + # touchdevice { + # transform = 1 + # } + # } + # bind = $mod, r, exec, rotate-screen hor + # bind = $mod SHIFT, r, exec, rotate-screen ver + # ''; home.packages = let rotateScript = pkgs.writeShellApplication { diff --git a/hosts/deltaflyer/plasma-mobile.nix b/hosts/deltaflyer/plasma-mobile.nix index 35c6f86..11eb446 100644 --- a/hosts/deltaflyer/plasma-mobile.nix +++ b/hosts/deltaflyer/plasma-mobile.nix @@ -3,6 +3,7 @@ # { lib, + pkgs, ... }: { @@ -16,35 +17,38 @@ # # desktopManager.plasma5.mobile.enable = true; - # displayManager.autoLogin = { - # enable = true; - # }; + displayManager.autoLogin = { + enable = true; + user = "ccr"; + }; - # displayManager.session = [{ - # manage = "desktop"; - # name = "hyprland"; - # start = '' - # ${pkgs.hyprland}/bin/Hyprland & - # waitPID=$! - # ''; - # }]; + displayManager.session = [ + { + manage = "desktop"; + name = "niri"; + start = '' + ${pkgs.niri}/bin/niri-session & + waitPID=$! + ''; + } + ]; - # displayManager.defaultSession = "hyprland"; + displayManager.defaultSession = "niri"; - # displayManager.lightdm = { - # enable = true; - # # Workaround for autologin only working at first launch. - # # A logout or session crashing will show the login screen otherwise. - # extraSeatDefaults = '' - # session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm - # ''; - # }; + displayManager.lightdm = { + enable = true; + # Workaround for autologin only working at first launch. + # A logout or session crashing will show the login screen otherwise. + extraSeatDefaults = '' + session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm + ''; + }; libinput.enable = true; }; hardware.bluetooth.enable = true; - hardware.pulseaudio.enable = lib.mkDefault true; # mkDefault to help out users wanting pipewire + hardware.pulseaudio.enable = lib.mkDefault false; # mkDefault to help out users wanting pipewire networking.networkmanager.enable = true; networking.wireless.enable = false; powerManagement.enable = true; diff --git a/modules/nix/default.nix b/modules/nix/default.nix index a46e84e..49227c9 100644 --- a/modules/nix/default.nix +++ b/modules/nix/default.nix @@ -8,12 +8,13 @@ { nixpkgs.overlays = [ (final: _: { - nix-fast-build = fleetFlake.inputs.nix-fast-build.packages.${final.system}.nix-fast-build // { - nix = final.nix; - }; - nix-eval-job = fleetFlake.inputs.lix-eval-jobs.packages.${final.system}.nix-eval-jobs // { - nix = final.nix; - }; + nix-eval-jobs = + (fleetFlake.inputs.lix-eval-jobs.packages.${final.system}.nix-eval-jobs.override { + nix = final.nix; + }) + // { + nix = final.nix; + }; }) ];