Merge branch 'trunk' into tungsten-btrfs-test

This commit is contained in:
Primrose 2025-07-04 22:35:00 +02:00
commit f740985bff
Signed by: primrose
GPG key ID: 4E887A4CA9714ADA
44 changed files with 331 additions and 318 deletions

View file

@ -1,6 +1,6 @@
# Entry point to cherry pick modules
let
sources = import ../sources.nix;
sources = import ../../npins;
hostname = "tungsten";
username = "leana";
@ -134,7 +134,6 @@ in
../homeModules/common/vim
../homeModules/common/wired
../homeModules/common/atuin.nix
../homeModules/common/battery-notify.nix
../homeModules/common/direnv.nix
../homeModules/common/feh.nix
../homeModules/common/firefox.nix
@ -144,7 +143,6 @@ in
../homeModules/common/kitty.nix
../homeModules/common/leana.nix
../homeModules/common/locale.nix
../homeModules/common/neovim.nix
../homeModules/common/packages.nix
../homeModules/common/password-store.nix
../homeModules/common/sioyek.nix

View file

@ -76,7 +76,6 @@
pkgs.xbrightness
pkgs.dmenu
pkgs.xclip
pkgs.playerctl # talk to playerctld
pkgs.xscreensaver # talk to xscreensaver
pkgs.xcolor
@ -104,12 +103,6 @@
enable = true;
components = ["secrets"];
};
battery-notify = {
enable = true;
device_full = "/sys/class/power_supply/BAT0/charge_full";
device_now = "/sys/class/power_supply/BAT0/charge_now";
};
};
}
];

View file

@ -9,20 +9,38 @@
, position = BottomH 30
, commands = [ Run Date "%a %d %H:%M:%S" "date" 10
, Run Battery
[ "-t", "<acstatus>:<left>%"
, "--"
, "-O", "󰂄"
, "-i", "󱟦"
, "-o", "󰁾"
[ "-t", "<left> (<timeleft>)"
, "-H", "70"
, "-L", "20"
, "-h", "green"
, "-m", "yell"
, "-n", "orange"
, "-l", "red"
, "--"
, "-P"
, "-A", "20"
, "-a", "notify-send -u critical \"Battery Low\" \"Please charge your battery\""
] 10
, Run XMonadLog
]
, Run
DynNetwork
[ "--template"
, "<dev>: <tx> kB/s <rx> kB/s"
, "--Low"
, "102400"
, "--High"
, "1024000"
, "--low"
, "green"
, "--normal"
, "orange"
, "--high"
, "red"
]
10
]
, sepChar = "%"
, alignSep = "}{"
, template = " %XMonadLog% }{ %battery% | %date% "
, template = " %XMonadLog% }{ %dynnetwork% | %battery% | %date% "
}
'';
};

View file

@ -17,9 +17,9 @@
services.fprintd.enable = false;
programs.weylus = {
enable = true;
users = ["leana"];
openFirewall = true;
};
# programs.weylus = {
# enable = true;
# users = ["leana"];
# openFirewall = true;
# };
}

View file

@ -1,6 +1,6 @@
# Entry point to cherry pick modules
let
sources = import ../sources.nix;
sources = import ../../npins;
hostname = "vanadium";
username = "leana";
@ -153,7 +153,6 @@ in
../homeModules/common/vim
../homeModules/common/wired
../homeModules/common/atuin.nix
../homeModules/common/battery-notify.nix
../homeModules/common/direnv.nix
../homeModules/common/feh.nix
../homeModules/common/firefox.nix
@ -164,7 +163,6 @@ in
../homeModules/common/leana.nix
../homeModules/common/locale.nix
../homeModules/common/lazygit.nix
../homeModules/common/neovim.nix
../homeModules/common/packages.nix
../homeModules/common/password-store.nix
../homeModules/common/sioyek.nix

View file

@ -23,6 +23,10 @@
pkgs.taplo # toml
pkgs.vscode-langservers-extracted # JSON etc
pkgs.yaml-language-server # yaml
# bash
pkgs.shfmt
pkgs.nodePackages.bash-language-server
];
programs.git = {

View file

@ -10,8 +10,6 @@ in {
enable = true;
policies = {
RequestedLocales = ["fr" "en-US" "zh-TW"];
SearchEngines = {
Default = "Google en@en";
Remove = ["Google"];

View file

@ -77,7 +77,7 @@
emacs = {
enable = true;
package = pkgs.emacs28;
package = pkgs.unsafe-emacs28;
};
lazygit.enable = true;
@ -106,7 +106,6 @@
# productivity / media
pkgs.evolution
pkgs.libreoffice
pkgs.iamb
pkgs.calibre
# pkgs.rawtherapee
pkgs.digikam
@ -159,12 +158,6 @@
enable = true;
components = ["secrets"];
};
battery-notify = {
enable = true;
device_full = "/sys/class/power_supply/BAT1/charge_full";
device_now = "/sys/class/power_supply/BAT1/charge_now";
};
};
}
];

View file

@ -1,6 +1,10 @@
{
programs.xmobar = {
enable = true;
# XMobar's config file is not a segment of valid Haskell source code -- it is instead a DSL
# Note how `Run` handles its arguments properly without parens?
#
# Also xmobar wants GHC if we use it as a library, and I'm lazy, you probably want to keep it this way.
extraConfig = ''
Config { overrideRedirect = False
, font = "Iosevka 13"
@ -9,20 +13,48 @@
, position = BottomH 30
, commands = [ Run Date "%a %d %H:%M:%S" "date" 10
, Run Battery
[ "-t", "<acstatus>:<left>%"
, "--"
, "-O", "󰂄"
, "-i", "󱟦"
, "-o", "󰁾"
[ "-t", "<left> (<timeleft>)"
, "-H", "70"
, "-L", "20"
, "-h", "green"
, "-m", "yell"
, "-n", "orange"
, "-l", "red"
] 10
, "--"
, "-P"
, "-A", "20"
, "-a", "notify-send -u critical \"Battery Low\" \"Please charge your battery\""
]
600
, Run XMonadLog
, Run
DynNetwork
[ "--template"
, "<dev>: <tx> kB/s <rx> kB/s"
, "--Low"
, "102400"
, "--High"
, "1024000"
, "--low"
, "green"
, "--normal"
, "orange"
, "--high"
, "red"
]
100
, Run
Weather "LFRN"
[ "-t", "<station>: <tempC>C"
, "-L","10", "-H", "25"
, "--normal", "white"
, "--high", "orange"
, "--low", "blue"
]
9000
]
, sepChar = "%"
, alignSep = "}{"
, template = " %XMonadLog% }{ %battery% | %date% "
, template = " %XMonadLog% }{ %dynnetwork% | %LFRN% | %battery% | %date% "
}
'';
};

View file

@ -16,6 +16,7 @@ import XMonad.Util.SpawnOnce (spawnOnce)
import XMonad.Layout.NoBorders (smartBorders)
import XMonad.Layout.Reflect (reflectHoriz)
import XMonad.Layout.Spacing (smartSpacingWithEdge)
import XMonad.Layout.Renamed (named)
import XMonad.Layout.ResizableTile (ResizableTall(ResizableTall), MirrorResize (MirrorShrink, MirrorExpand))
import XMonad.Hooks.ManageHelpers (isFullscreen, (~?), composeOne, (-?>))
@ -93,9 +94,10 @@ main = xmonad
let tallr = reflectMsg . reflectHoriz
$ ResizableTall 1 (1/10) (3/7) []
in smartBorders
( smartSpacingWithEdge 5 tallr
||| Full
)
( named "Normal"
(smartSpacingWithEdge 5 tallr)
||| Full
)
, manageHook =
let
@ -184,9 +186,9 @@ main = xmonad
-- Screenshots
++ (let
fullscreen = "maim | xclip -in -selection clipboard -t image/png"
withSelection = "maim -s -b 5 -o | xclip -in -selection clipboard -t image/png"
toFloat = "maim -s -b 5 -o | feh --auto-zoom -"
fullscreen = "maim -u | xclip -in -selection clipboard -t image/png"
withSelection = "maim -u -s -b 5 -o | xclip -in -selection clipboard -t image/png"
toFloat = "maim -u -s -b 5 -o | feh --auto-zoom -"
in
[ ((0, xK_Print), spawn fullscreen )
, ((superMask .|. shiftMask, xK_3 ), spawn fullscreen )

View file

@ -21,9 +21,9 @@
services.fprintd.enable = false;
programs.weylus = {
enable = true;
users = ["leana"];
openFirewall = true;
};
# programs.weylus = {
# enable = true;
# users = ["leana"];
# openFirewall = true;
# };
}

View file

@ -1,5 +1,5 @@
let
sources = import ../../sources.nix;
sources = import ../../../npins;
lib = import (sources.nixpkgs + "/lib");
infuse-lib = import sources.infuse {
@ -54,4 +54,18 @@ in
./patches/fcitx5-chinese-addons/disable-fullwidth.patch
# Note: disabling pinyin helper breaks canjie
];
# TODO: remove this when upstream is updated
sudo.__output.patches.__append = [
(final.fetchpatch {
name = "CVE-2025-32462";
url = "https://github.com/sudo-project/sudo/commit/d530367828e3713d09489872743eb92d31fb11ff.patch";
hash = "sha256-mS8fcPV1QDv9SDuGN7dfDLtVLSBP+apotYW1UsEBPvU=";
})
(final.fetchpatch {
name = "CVE-2025-32463";
url = "https://github.com/sudo-project/sudo/commit/fdafc2ceb36382b07e604c0f39903d56bef54016.patch";
hash = "sha256-4FP8z5pKwcOfJxjJ9X/IbCgriKJm1H/HnswuvYjBlt8=";
})
];
}

View file

@ -2,7 +2,7 @@
# This is the non flake shell that just gets the basics of flora so I can have hls support outside of docker
#
let
sources = import ../sources.nix;
sources = import ../../npins;
in
{pkgs ? import sources.pin-florashell {}}:
pkgs.mkShell (let

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
{pkgs ? import sources.pin-necro-man-nixpkgs {}}: let
shell = {

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
{pkgs ? import sources.pin-vim-tw {}}:
pkgs.mkShell {

View file

@ -1,70 +0,0 @@
{
pkgs,
lib,
config,
...
}: let
cfg = config.services."battery-notify";
in {
options = {
services."battery-notify" = {
enable = lib.mkEnableOption "battery-notify";
triggerLevel = lib.mkOption {
type = with lib.types; ints.between 0 100;
description = "Below which percentage should the script send a notification";
default = 20;
};
checkAt = lib.mkOption {
type = with lib.types; listOf str;
description = "At which frequency should the service check for the battery status";
default = ["*:0/5"]; # every five minutes
};
device_full = lib.mkOption {
type = with lib.types; str;
description = "The device to read for full energy status";
};
device_now = lib.mkOption {
type = with lib.types; str;
description = "The device to read for current energy status";
};
};
};
config = lib.mkIf cfg.enable {
systemd.user.services."battery-notify" = {
Unit.Description = "Notify when battery is low";
Install = {
WantedBy = ["multi-user.target"];
};
Service = {
ExecStart = let
script = pkgs.writeShellApplication {
name = "battery-notify";
runtimeInputs = [
pkgs.libnotify
pkgs.bc
pkgs.uutils-coreutils-noprefix
];
text = ''
now="$(cat ${cfg.device_now})"
full="$(cat ${cfg.device_full})"
if (( $(bc -l <<< "($now / $full) * 100 < ${builtins.toString cfg.triggerLevel}") )); then
notify-send -u critical "Battery Low" "Please charge your battery"
fi
'';
};
in "${lib.getExe script}";
};
};
systemd.user.timers."battery-notify" = {
Unit.Description = "Notify when battery is low";
Timer = {
OnCalendar = cfg.checkAt;
Persistent = true;
};
Install.WantedBy = ["timers.target"];
};
};
}

View file

@ -3,36 +3,24 @@
in {
programs.firefox = {
# https://mozilla.github.io/policy-templates
# The following have more complex logic, keep them as policies and not profiles
policies = {
# Trans lations are of poor quality anyways
RequestedLocales = ["en-US"];
SearchEngines = {
Remove = ["Bing" "DuckDuckGo" "Qwant" "eBay"];
};
HardwareAcceleration = true;
DisableFirefoxScreenshots = false;
DisablePocket = true;
NoDefaultBookmarks = true;
DisplayMenuBar = "never";
DisplayBookmarksToolbar = "never";
NoDefaultBookmarks = true;
OfferToSaveLogins = false;
OfferToSaveLoginsDefault = false;
PasswordManagerEnabled = false;
FirefoxHome = {
Search = true;
TopSites = true;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
SponsoredPocket = false;
};
UserMessaging = {
ExtensionRecommendations = false;
SkipOnboarding = true;
};
DNSOverHTTPS = {
Enabled = true;
};
};
# https://searchfox.org/mozilla-central/source/browser/components/enterprisepolicies/Policies.sys.mjs
# Some policies can be rewritten to profiles configuration
profiles.default = {
settings = {
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
@ -40,6 +28,45 @@ in {
"browser.ctrlTab.sortByRecentlyUsed" = false;
"layout.css.devPixelsPerPx" = 1.1;
"full-screen-api.ignore-widgets" = true; # limit fullscreen mode to window
# Sponsored crap
# Yes
"browser.newtabpage.activity-stream.showSearch" = true;
"browser.newtabpage.activity-stream.feeds.topsites" = true;
# No
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.newtabpage.activity-stream.feeds.section.highlights" = false;
"browser.newtabpage.activity-stream.feeds.system.topstories" = false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
"browser.newtabpage.activity-stream.showSponsored" = false;
# URL
# Yes
"browser.urlbar.suggest.quicksuggest.nonsponsored" = true;
# No
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
# Pasword manager
"signon.rememberSignons" = false;
"services.passwordSavingEnabled" = false;
"pref.privacy.disable_button.view_passwords" = false;
# Hardware acceleration
"layers.acceleration.disabled" = false;
# Screenshot
"screenshots.browser.component.enabled" = true;
# Recommendations
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false;
"extensions.htmlaboutaddons.recommendations.enabled" = false; # Addons
# Onboarding
"browser.aboutwelcome.enabled" = false;
# AI crap
"browser.ml.chat.enabled" = false;
};
extensions.packages = let
@ -47,6 +74,15 @@ in {
in [
addons.ublock-origin
addons.privacy-badger
/*
Here's to you who want to remove news feed eradicator because you find it annoying:
It is here to annoy you so it is less likely for you to be on the agency inversion path.
DO NOT REMOVE IT. I repeat, DO NOT REMOVE IT.
If you think it's annoying, go do some jump rope, sing, live.
*/
addons.news-feed-eradicator # did you read the comment above?
addons.multi-account-containers
];
};

View file

@ -1,13 +1,24 @@
{lib, ...}: {
{
lib,
config,
...
}: {
# git plugins
programs.git = {
lfs.enable = true;
difftastic = {
enable = true;
enableAsDifftool = true;
};
patdiff.enable = true;
};
# 懶惰鬼賴皮
programs.lazygit = let
patdiffCfg = config.programs.git.patdiff;
in
lib.mkIf patdiffCfg.enable {
settings = {
git.paging.externalDiffCommand = "${lib.getExe' patdiffCfg.package "patdiff-git-wrapper"}";
};
};
# git itself
programs.git = {
extraConfig = {

View file

@ -1,17 +0,0 @@
{
pkgs,
lib,
config,
...
}: let
cfg = config.programs.neovim;
in {
config = lib.mkIf cfg.enable {
home.packages = [
# might be useful for servers, serves as minimal configuration
pkgs.nodePackages.bash-language-server
pkgs.shellcheck
pkgs.shfmt
];
};
}

View file

@ -1,21 +1,5 @@
{pkgs, ...}: {
{
security.sudo.extraConfig = ''
Defaults lecture = always
Defaults lecture_file = ${pkgs.writeText "sudo_lecture_file" ''
λλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλ
λλλλ
λλλ
λλλ
λλλ Beep Boop
λλλ Are you sure about this?
λ λλλ Think twice :3
λ λλλ
λ λλλ
λ λλλ
λ λλλλ
λλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλλ
''}
'';
}

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
final: _: {
inherit (final.callPackage sources.agenix {}) agenix;

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
final: _: {
disko =

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
final: prev: {
fcitx5-table-extra = prev.fcitx5-table-extra.overrideAttrs (oldAttrs: {

View file

@ -1,6 +1,6 @@
# Run the one with my cool feature here for now
let
sources = import ../sources.nix;
sources = import ../../npins;
inherit (sources) nil;
inherit (nil.repository) owner repo;
in

View file

@ -1,7 +1,7 @@
# The one in nixpkgs doesn't work
# Getting nix-tree: user error (Failed parsing nix path-info output.)
let
sources = import ../sources.nix;
sources = import ../../npins;
in
final: _: {
nix-tree = (import sources.nix-tree).packages.${final.system}.default;

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
_: prev: {
nur = import sources.nur {

View file

@ -1,6 +1,6 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
_: _: {
emacs28 = (import sources.pin-emacs28 {}).emacs;
unsafe-emacs28 = (import sources.pin-emacs28 {}).emacs;
}

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
_: _: {
# Isabelle version 2023

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
_: _: {
# Wireshark bug

View file

@ -1,5 +1,5 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
_: _: {
wallpapers = import sources.wallpapers {};

View file

@ -1,4 +1,4 @@
let
sources = import ../sources.nix;
sources = import ../../npins;
in
(import sources.wired-notify).overlays.default

View file

@ -1,4 +1,4 @@
{sources ? import ../sources.nix}: let
{sources ? import ../../npins}: let
scopeOverlay = overlay: final: prev: {export = prev.export or {} // overlay final prev;};
in
(

View file

@ -1,2 +0,0 @@
# Compatibility shim that redirects to npins
import ../npins