diff --git a/nix/configurations/vanadium.nix b/nix/configurations/vanadium.nix index 5427bafb..31f93d79 100644 --- a/nix/configurations/vanadium.nix +++ b/nix/configurations/vanadium.nix @@ -109,6 +109,7 @@ in ../nixosModules/common/network.nix ../nixosModules/common/sudo-conf.nix ../nixosModules/common/system-nixconf.nix + ../nixosModules/common/xscreensaver.nix # QUIRK: # Had issue when building the installer as it fails to bootstrap itself diff --git a/nix/configurations/vanadium/home/misc.nix b/nix/configurations/vanadium/home/misc.nix index 23ca97da..44492885 100644 --- a/nix/configurations/vanadium/home/misc.nix +++ b/nix/configurations/vanadium/home/misc.nix @@ -70,6 +70,7 @@ ]; home.file = { + ".xscreensaver".source = "${./xscreensaver/.xscreensaver}"; ".wallpaper".source = "${pkgs.wallpapers.packages.serial_experiments_lain.lain_windows_error}"; }; xdg.configFile = { diff --git a/nix/configurations/vanadium/home/programs.nix b/nix/configurations/vanadium/home/programs.nix index 9fa790e2..15a8422a 100644 --- a/nix/configurations/vanadium/home/programs.nix +++ b/nix/configurations/vanadium/home/programs.nix @@ -66,8 +66,8 @@ pkgs.dmenu pkgs.xclip pkgs.maim + pkgs.xscreensaver # talk to xscreensaver pkgs.xcolor - pkgs.xsecurelock # audio utilities pkgs.helvum diff --git a/nix/configurations/vanadium/home/xmonad/xmonad.hs b/nix/configurations/vanadium/home/xmonad/xmonad.hs index c5473f87..d43896b6 100644 --- a/nix/configurations/vanadium/home/xmonad/xmonad.hs +++ b/nix/configurations/vanadium/home/xmonad/xmonad.hs @@ -352,7 +352,7 @@ keybinds = -- Launcher ++ (let launchFirefox = "firefox" launchDmenu = "dmenu_run -i -fn \"Iosevka-18\" -nb \"#36363a\" -nf \"#e2e2e4\" -sb \"#f7f7f8\" -sf \"#36363a\" -l 10" - lock = "XSECURELOCK_PASSWORD_PROMPT=time_hex xsecurelock" + lock = "xscreensaver-command -lock" in [ ((controlMask .|. altMask, xK_m), namedScratchpadAction myScratchpads "cmus" ) , ((controlMask .|. altMask, xK_t), namedScratchpadAction myScratchpads "btop" ) , ((controlMask .|. altMask, xK_p), namedScratchpadAction myScratchpads "pass" ) diff --git a/nix/configurations/vanadium/home/xscreensaver/.xscreensaver b/nix/configurations/vanadium/home/xscreensaver/.xscreensaver new file mode 100644 index 00000000..235e685e --- /dev/null +++ b/nix/configurations/vanadium/home/xscreensaver/.xscreensaver @@ -0,0 +1,299 @@ +# XScreenSaver Preferences File +# Written by xscreensaver-settings 6.08 for leana on Tue Jul 23 23:44:33 2024. +# https://www.jwz.org/xscreensaver/ + +timeout: 0:07:00 +cycle: 0:07:00 +lock: True +lockTimeout: 0:00:00 +passwdTimeout: 0:00:30 +visualID: default +installColormap: True +verbose: False +splash: True +splashDuration: 0:00:05 +demoCommand: xscreensaver-settings +nice: 10 +fade: False +unfade: False +fadeSeconds: 0:00:03 +ignoreUninstalledPrograms:False +dpmsEnabled: True +dpmsQuickOff: False +dpmsStandby: 0:10:00 +dpmsSuspend: 0:10:00 +dpmsOff: 0:15:00 +grabDesktopImages: True +grabVideoFrames: False +chooseRandomImages: False +imageDirectory: + +mode: one +selected: 204 + +textMode: url +textLiteral: XScreenSaver +textFile: +textProgram: fortune +textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss +dialogTheme: default +settingsGeom: 15,32 216,222 + +programs: \ + maze --root \n\ + GL: superquadrics --root \n\ + attraction --root \n\ + blitspin --root \n\ + greynetic --root \n\ + helix --root \n\ + hopalong --root \n\ + imsmap --root \n\ +- noseguy --root \n\ +- pyro --root \n\ + qix --root \n\ +- rocks --root \n\ + rorschach --root \n\ + decayscreen --root \n\ + flame --root \n\ + halo --root \n\ + slidescreen --root \n\ + pedal --root \n\ + bouboule --root \n\ +- braid --root \n\ + coral --root \n\ + deco --root \n\ + drift --root \n\ +- fadeplot --root \n\ + galaxy --root \n\ + goop --root \n\ + grav --root \n\ + ifs --root \n\ + GL: jigsaw --root \n\ + julia --root \n\ +- kaleidescope --root \n\ + GL: moebius --root \n\ + moire --root \n\ + GL: morph3d --root \n\ + mountain --root \n\ + munch --root \n\ + penrose --root \n\ + GL: pipes --root \n\ + rdbomb --root \n\ + GL: rubik --root \n\ +- sierpinski --root \n\ + slip --root \n\ + GL: sproingies --root \n\ + starfish --root \n\ + strange --root \n\ + swirl --root \n\ + triangle --root \n\ + xjack --root \n\ + xlyap --root \n\ + GL: atlantis --root \n\ + bsod --root \n\ + GL: bubble3d --root \n\ + GL: cage --root \n\ +- crystal --root \n\ + cynosure --root \n\ + discrete --root \n\ + distort --root \n\ + epicycle --root \n\ + flow --root \n\ + GL: glplanet --root \n\ + interference --root \n\ + kumppa --root \n\ + GL: lament --root \n\ + moire2 --root \n\ + GL: sonar --root \n\ + GL: stairs --root \n\ + truchet --root \n\ +- vidwhacker --root \n\ +- webcollage --root \n\ + blaster --root \n\ + bumps --root \n\ + ccurve --root \n\ + compass --root \n\ + deluxe --root \n\ +- demon --root \n\ + GL: extrusion --root \n\ +- loop --root \n\ + penetrate --root \n\ + petri --root \n\ + phosphor --root \n\ + GL: pulsar --root \n\ + ripples --root \n\ + shadebobs --root \n\ + GL: sierpinski3d --root \n\ + spotlight --root \n\ + squiral --root \n\ + wander --root \n\ + xflame --root \n\ + xmatrix --root \n\ + GL: gflux --root \n\ +- nerverot --root \n\ + xrayswarm --root \n\ + xspirograph --root \n\ + GL: circuit --root \n\ + GL: dangerball --root \n\ +- GL: dnalogo --root \n\ + GL: engine --root \n\ + GL: flipscreen3d --root \n\ + GL: gltext --root \n\ + GL: menger --root \n\ + GL: molecule --root \n\ + rotzoomer --root \n\ + scooter --root \n\ + speedmine --root \n\ + GL: starwars --root \n\ + GL: stonerview --root \n\ + vermiculate --root \n\ + whirlwindwarp --root \n\ + zoom --root \n\ + anemone --root \n\ + apollonian --root \n\ + GL: boxed --root \n\ + GL: cubenetic --root \n\ + GL: endgame --root \n\ + euler2d --root \n\ + fluidballs --root \n\ + GL: flurry --root \n\ +- GL: glblur --root \n\ + GL: glsnake --root \n\ + halftone --root \n\ + GL: juggler3d --root \n\ + GL: lavalite --root \n\ +- polyominoes --root \n\ + GL: queens --root \n\ +- GL: sballs --root \n\ + GL: spheremonics --root \n\ + twang --root \n\ +- GL: antspotlight --root \n\ + apple2 --root \n\ + GL: atunnel --root \n\ + barcode --root \n\ + GL: blinkbox --root \n\ + GL: blocktube --root \n\ + GL: bouncingcow --root \n\ + cloudlife --root \n\ + GL: cubestorm --root \n\ + eruption --root \n\ + GL: flipflop --root \n\ + GL: flyingtoasters --root \n\ + fontglide --root \n\ + GL: gleidescope --root \n\ + GL: glknots --root \n\ + GL: glmatrix --root \n\ +- GL: glslideshow --root \n\ + GL: hypertorus --root \n\ +- GL: jigglypuff --root \n\ + metaballs --root \n\ + GL: mirrorblob --root \n\ + piecewise --root \n\ + GL: polytopes --root \n\ + pong --root \n\ + popsquares --root \n\ + GL: surfaces --root \n\ + xanalogtv --root \n\ + abstractile --root \n\ + anemotaxis --root \n\ +- GL: antinspect --root \n\ + fireworkx --root \n\ + fuzzyflakes --root \n\ + interaggregate --root \n\ + intermomentary --root \n\ + memscroller --root \n\ + GL: noof --root \n\ + pacman --root \n\ + GL: pinion --root \n\ + GL: polyhedra --root \n\ +- GL: providence --root \n\ + substrate --root \n\ + wormhole --root \n\ +- GL: antmaze --root \n\ + GL: boing --root \n\ + boxfit --root \n\ + GL: carousel --root \n\ + celtic --root \n\ + GL: crackberg --root \n\ + GL: cube21 --root \n\ + fiberlamp --root \n\ + GL: fliptext --root \n\ + GL: glhanoi --root \n\ + GL: tangram --root \n\ + GL: timetunnel --root \n\ + GL: glschool --root \n\ + GL: topblock --root \n\ + GL: cubicgrid --root \n\ + cwaves --root \n\ + GL: gears --root \n\ + GL: glcells --root \n\ + GL: lockward --root \n\ + m6502 --root \n\ + GL: moebiusgears --root \n\ + GL: voronoi --root \n\ + GL: hypnowheel --root \n\ + GL: klein --root \n\ +- lcdscrub --root \n\ + GL: photopile --root \n\ + GL: skytentacles --root \n\ + GL: rubikblocks --root \n\ + GL: companioncube --root \n\ + GL: hilbert --root \n\ + GL: tronbit --root \n\ + GL: geodesic --root \n\ + hexadrop --root \n\ + GL: kaleidocycle --root \n\ + GL: quasicrystal --root \n\ + GL: unknownpleasures --root --no-ortho \n\ + binaryring --root \n\ + GL: cityflow --root \n\ + GL: geodesicgears --root \n\ + GL: projectiveplane --root \n\ + GL: romanboy --root \n\ + tessellimage --root \n\ + GL: winduprobot --root \n\ + GL: splitflap --root \n\ + GL: cubestack --root \n\ + GL: cubetwist --root \n\ + GL: discoball --root \n\ + GL: dymaxionmap --root \n\ + GL: energystream --root \n\ + GL: hexstrut --root \n\ + GL: hydrostat --root \n\ + GL: raverhoop --root \n\ + GL: splodesic --root \n\ + GL: unicrud --root \n\ + GL: esper --root \n\ + GL: vigilance --root \n\ + GL: crumbler --root \n\ + filmleader --root \n\ + glitchpeg --root \n\ + GL: handsy --root \n\ + GL: maze3d --root \n\ + GL: peepers --root \n\ + GL: razzledazzle --root \n\ + vfeedback --root \n\ + GL: deepstars --root \n\ + GL: gravitywell --root \n\ + GL: beats --root \n\ + GL: covid19 --root \n\ + GL: etruscanvenus --root \n\ + GL: gibson --root \n\ + GL: headroom --root \n\ + GL: sphereeversion --root \n\ + binaryhorizon --root \n\ + marbling --root \n\ + GL: chompytower --root \n\ + GL: hextrail --root \n\ + GL: mapscroller --root \n\ + GL: nakagin --root \n\ + GL: squirtorus --root \n\ + GL: cubocteversion --root \n\ + droste --root \n\ + GL: papercube --root \n\ + GL: skulloop --root \n\ + + +pointerHysteresis: 10 +authWarningSlack: 20 + diff --git a/nix/configurations/vanadium/nixos/gui.nix b/nix/configurations/vanadium/nixos/gui.nix index e7c4d0d8..b9b1f6b4 100644 --- a/nix/configurations/vanadium/nixos/gui.nix +++ b/nix/configurations/vanadium/nixos/gui.nix @@ -41,6 +41,16 @@ }; }; + services.xscreensaver = { + enable = true; + hooks = { + # Reset display setting on login + "RUN" = '' + ${lib.getExe pkgs.autorandr} --change --ignore-lid + ''; + }; + }; + services.picom = { enable = true; # avoid tearing diff --git a/nix/configurations/vanadium/nixos/locale.nix b/nix/configurations/vanadium/nixos/locale.nix index 871b7c4e..b0c480c7 100644 --- a/nix/configurations/vanadium/nixos/locale.nix +++ b/nix/configurations/vanadium/nixos/locale.nix @@ -29,6 +29,7 @@ let genLocale = locale: lib.flip lib.genAttrs (_: locale); in + # - xscreensaver freaks out on the time display # - evolution add event becomes hard to use # https://gitlab.gnome.org/GNOME/evolution/-/issues/3120 genLocale "fr_FR.UTF-8" [ diff --git a/nix/nixosModules/common/xscreensaver.nix b/nix/nixosModules/common/xscreensaver.nix new file mode 100644 index 00000000..49aebbd0 --- /dev/null +++ b/nix/nixosModules/common/xscreensaver.nix @@ -0,0 +1,54 @@ +# +# This module provides a service react to xscreensaver events +# +{ + config, + lib, + ... +}: +let + cfg = config.services.xscreensaver; +in +{ + options = { + services.xscreensaver.hooks = lib.mkOption { + type = with lib.types; attrsOf str; + description = "An attrset of events mapped a block of shell command to be run"; + default = { }; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.user.services = { + "xscreensaver-hooks" = { + description = "Run commands on xscreensaver events"; + after = [ + "graphical-session.target" + "xscreensaver.service" + ]; + partOf = [ "graphical-session.target" ]; + wantedBy = [ "graphical-session.target" ]; + script = + let + handlers = lib.concatMapAttrsStringSep "\n" (event: action: '' + "${event}") + ( ${action} + ) + ;; + '') cfg.hooks; + in + '' + xscreensaver-command -watch | while read event rest; do + echo "The handler script got \"$event\"" + case $event in + ${handlers} + esac + done + ''; + path = [ + cfg.package # contains xscreensaver-command + ]; + }; + }; + }; +}