diff --git a/README.md b/README.md index 67f82630..949f6b2f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This repo is managed with Nix + GNU stow - `wpa_cli` ```bash add_network - # will return a number + # wil return a number set_network ssid "" set_network psk "" select_network 0 diff --git a/nix/configurations/hetzner_benchmark/home/dev.nix b/nix/configurations/hetzner_benchmark/home/dev.nix index 04ac99bf..1a816999 100644 --- a/nix/configurations/hetzner_benchmark/home/dev.nix +++ b/nix/configurations/hetzner_benchmark/home/dev.nix @@ -1,10 +1,4 @@ -{ pkgs, ... }: { - home.packages = [ - pkgs.hyperfine # for benchmarking - pkgs.watchexec - ]; - programs.git = { enable = true; signing.signByDefault = false; # no need to setup the key diff --git a/nix/configurations/hetzner_benchmark/home/programs.nix b/nix/configurations/hetzner_benchmark/home/programs.nix index 2503c61d..be1cbfc1 100644 --- a/nix/configurations/hetzner_benchmark/home/programs.nix +++ b/nix/configurations/hetzner_benchmark/home/programs.nix @@ -20,6 +20,17 @@ pkgs.unzip pkgs.gnutar pkgs.p7zip + pkgs.bc + pkgs.dig + pkgs.hutils + + # pretty tui tools + pkgs.dust + pkgs.tokei + pkgs.hyperfine + pkgs.watchexec + pkgs.onefetch + pkgs.just ]; programs = { diff --git a/nix/configurations/installer.nix b/nix/configurations/installer.nix index de59e0a6..3b9d56db 100644 --- a/nix/configurations/installer.nix +++ b/nix/configurations/installer.nix @@ -1,7 +1,9 @@ +# # Note: # I could've import the wifi configuration and use it here, but I haven't # figured out an elegant (enough) way to do it while keeping my secrets # encrypted. +# let sources = import ../../npins; in @@ -35,7 +37,8 @@ in overlays = map import [ ../overlays/agenix.nix ../overlays/disko.nix - ../overlays/npins.nix + ../overlays/nur.nix + ../packages/overlay.nix ]; }; @@ -51,20 +54,18 @@ in isoImage.squashfsCompression = "zstd -Xcompression-level 3"; - environment.systemPackages = with pkgs; [ - agenix - npins - disko - stow - manage - - git - pastebinit # for sharing cli output & debugging - hdparm # to ATA secure wipe disks + environment.systemPackages = [ + pkgs.disko + pkgs.manage + pkgs.git + pkgs.pastebinit # for sharing cli output & debugging + pkgs.hdparm # to ATA secure wipe disks + pkgs.btop ]; networking.firewall.allowedTCPPorts = [ 8080 ]; # in case you wanna nc + programs.tmux.enable = true; users.users.nixos.shell = pkgs.fish; programs.fish.enable = true; diff --git a/nix/configurations/vanadium.nix b/nix/configurations/vanadium.nix index ac6cd805..6be7ec17 100644 --- a/nix/configurations/vanadium.nix +++ b/nix/configurations/vanadium.nix @@ -150,6 +150,7 @@ in ./vanadium/home/misc.nix ./vanadium/home/gtk.nix + ./vanadium/home/zen-browser.nix ./vanadium/home/firefox.nix ./vanadium/home/xmobar.nix @@ -168,6 +169,7 @@ in ../homeModules/common/atuin.nix ../homeModules/common/direnv.nix ../homeModules/common/feh.nix + ../homeModules/common/zen-browser.nix ../homeModules/common/firefox.nix ../homeModules/common/fzf.nix ../homeModules/common/git.nix @@ -189,6 +191,9 @@ in # (sources.agenix + "/modules/age-home.nix") sources.wired-notify.asFlake.homeManagerModules.default + + # non official one uses reuploaded artifacts, are they audited? + sources.zen-browser.asFlake.homeModules.beta ]; } diff --git a/nix/configurations/vanadium/home/dev.nix b/nix/configurations/vanadium/home/dev.nix index a1ea942c..dddef0f0 100644 --- a/nix/configurations/vanadium/home/dev.nix +++ b/nix/configurations/vanadium/home/dev.nix @@ -6,20 +6,12 @@ }: { home.packages = [ - pkgs.watchexec - - # Nix - pkgs.nurl # fetcher made easy - pkgs.nix-diff # debug cache miss - pkgs.nix-tree # analyze closure - pkgs.nix-which - # preview markdown pkgs.python3Packages.grip # For {nix,haskell} contribution pkgs.gh - # pkgs.act + pkgs.act pkgs.nixfmt-rfc-style pkgs.nix-doc pkgs.nixpkgs-review @@ -27,7 +19,6 @@ pkgs.fx # json viewer - # LSPs pkgs.lua-language-server pkgs.stylua # lua pkgs.nil # nix @@ -37,7 +28,9 @@ pkgs.vscode-langservers-extracted # JSON etc pkgs.yaml-language-server # yaml pkgs.cornelis # agda - pkgs.shfmt # bash + + # bash + pkgs.shfmt pkgs.nodePackages.bash-language-server # ghc @@ -66,6 +59,14 @@ programs.gpg.enable = true; + # programs.vscode = { + # enable = true; + # profiles.default.extensions = [ + # pkgs.vscode-extensions.redhat.java + # pkgs.vscode-extensions.vscjava.vscode-java-pack + # ]; + # }; + nix = { settings = { extra-substituters = [ diff --git a/nix/configurations/vanadium/home/programs.nix b/nix/configurations/vanadium/home/programs.nix index 15a8422a..b0b931ab 100644 --- a/nix/configurations/vanadium/home/programs.nix +++ b/nix/configurations/vanadium/home/programs.nix @@ -18,17 +18,21 @@ }; home.packages = [ - # TODO: write a simple rpn calculator for scripting (and learn bash properly) pkgs.ghc # my favorite calculator pkgs.lsr # fast ls with io_uring pkgs.nmap + pkgs.stow pkgs.zip pkgs.unzip pkgs.gnutar pkgs.p7zip + pkgs.bc pkgs.dig - pkgs.hutils # TODO: simplify this project + pkgs.hutils + pkgs.miniserve + pkgs.agenix + pkgs.nix-which # To quote a legendary programer: # > for whenever people think mac is hardcoded in hardware. @@ -37,20 +41,50 @@ # lol pkgs.macchanger + # The file picker is not ergonomic enough, sadly + pkgs.helix + # pkgs.nushell + pkgs.ruler + pkgs.mini-calc # pdf pkgs.poppler-utils # pdfseparate, pdfunite pkgs.easyscan + # fun + # pkgs.prop-solveur + # pkgs.hbrainfuck + # pkgs.lucky-commit + + # # research + # pkgs.necrolib + + # pretty tui tools + pkgs.dust + pkgs.tokei + pkgs.hyperfine + pkgs.watchexec + pkgs.onefetch + pkgs.just + + pkgs.nixfmt-rfc-style # formatter + pkgs.nurl # fetcher made easy + pkgs.nix-diff # debug cache miss + pkgs.npins + pkgs.nix-tree # analyze closure + # productivity / media - pkgs.evolution # TODO: find an alternative - # pkgs.libreoffice + pkgs.evolution + pkgs.libreoffice pkgs.calibre pkgs.digikam pkgs.nautilus pkgs.sushi # space bar previewer + # pkgs.xournalpp pkgs.picard # music tagger + pkgs.mousai + pkgs.nicotine-plus pkgs.qbittorrent pkgs.mkvtoolnix pkgs.localsend # file share with iOS @@ -82,7 +116,12 @@ defaultEditor = true; }; lazygit.enable = true; - fish.enable = true; + fish = { + enable = true; + shellAbbrs = { + "fdoc" = "find ~/Documents -name"; + }; + }; starship.enable = true; tmux.enable = true; direnv.enable = true; diff --git a/nix/configurations/vanadium/home/xmobar/xmobar.hs b/nix/configurations/vanadium/home/xmobar/xmobar.hs index aafadb00..76b011e3 100644 --- a/nix/configurations/vanadium/home/xmobar/xmobar.hs +++ b/nix/configurations/vanadium/home/xmobar/xmobar.hs @@ -65,8 +65,7 @@ config = , Run $ Com "tomorrow" - [ "--target", "2026-02-17=monmaster⁺" - , "--target", "2026-03-16=monmaster⁻" + [ "--target", "2026-02-02=monmaster" ] "" (60 &minute) diff --git a/nix/configurations/vanadium/home/xmonad/xmonad.hs b/nix/configurations/vanadium/home/xmonad/xmonad.hs index d43896b6..2a11cb98 100644 --- a/nix/configurations/vanadium/home/xmonad/xmonad.hs +++ b/nix/configurations/vanadium/home/xmonad/xmonad.hs @@ -165,7 +165,7 @@ myManageHook = composeAll [ isNautilusPreviewer --> customFloating centeredFloat , isPavucontrol --> customFloating centeredFloat - , isFeh --> doF copyToAll <> customFloating bottomRightFloat + , isFeh --> doF copyToAll <> customFloating buttomRightFloat , isMinder --> customFloating centeredFloat , isDiscord --> doShift chatWS , isEvolution --> doShift chatWS @@ -177,7 +177,7 @@ myManageHook = -- Note: some rules here are overlapping, the first one will take the precedence (composeOne) -- e.g. firefoxpip is a utility window <> composeOne - [ isFirefoxPip -?> doF copyToAll <> customFloating bottomRightFloat + [ isFirefoxPip -?> doF copyToAll <> customFloating buttomRightFloat , isUtility -?> doIgnore , isDialog -?> customFloating centeredFloat , isEvolutionComposer -?> customFloating centeredFloat @@ -399,11 +399,11 @@ chatWS = myWorkspaces !! 3 multimediaWS :: WorkspaceId multimediaWS = myWorkspaces !! 6 -centeredFloat, smallFloat, fullFloat, bottomRightFloat :: W.RationalRect +centeredFloat, smallFloat, fullFloat, buttomRightFloat :: W.RationalRect centeredFloat = W.RationalRect (1%9) (1%9) (7%9) (7%9) smallFloat = W.RationalRect (3%5) (3%5) (2%7) (2%7) fullFloat = W.RationalRect 0 0 1 1 -bottomRightFloat = W.RationalRect (1%2) (1%2) (1%2) (1%2) +buttomRightFloat = W.RationalRect (1%2) (1%2) (1%2) (1%2) xmobarConfig :: StatusBarConfig xmobarConfig = statusBarProp "xmobar -x 0" (pure myPrettyPrinter) diff --git a/nix/configurations/vanadium/home/zen-browser.nix b/nix/configurations/vanadium/home/zen-browser.nix new file mode 100644 index 00000000..0e2ecd9f --- /dev/null +++ b/nix/configurations/vanadium/home/zen-browser.nix @@ -0,0 +1,166 @@ +{ + pkgs, + config, + ... +}: +let + inherit (pkgs) nur; +in +{ + programs.zen-browser = { + enable = false; + + policies.SearchEngines.Add = [ + # Forges + { + Name = "GitHub"; + Alias = "@gh"; + IconURL = "https://github.com/favicon.ico"; + Description = "Your code yum yum"; + URLTemplate = "https://github.com/search?q={searchTerms}&type=repositories"; + } + { + Name = "GitHub (Code Search)"; + Alias = "@ghc"; + IconURL = "https://github.com/favicon.ico"; + Description = "Your code yum yum"; + URLTemplate = "https://github.com/search?q={searchTerms}&type=code"; + } + { + Name = "Codeberg"; + Alias = "@cb"; + IconURL = "https://codeberg.org/favicon.ico"; + Description = "Software development, but free!"; + URLTemplate = "https://codeberg.org/explore/repos?q={searchTerms}"; + } + { + Name = "?C"; + Alias = "@cc"; + IconURL = "https://git.confusedcompiler.org/favicon.ico"; + URLTemplate = "https://git.confusedcompiler.org/explore/repos?q={searchTerms}"; + } + + # Nix{,OS,pkgs} + { + Name = "NixOS Search (Package)"; + Alias = "@np"; + IconURL = "https://nixos.org/favicon.ico"; + Description = "Search in nixpkgs"; + URLTemplate = "https://search.nixos.org/packages?query={searchTerms}"; + } + { + Name = "NixOS Search (Options)"; + Alias = "@no"; + IconURL = "https://nixos.org/favicon.ico"; + Description = "Search in NixOS options"; + URLTemplate = "https://search.nixos.org/options?query={searchTerms}"; + } + + # Haskell + { + Name = "Flora"; + Alias = "@hs"; + IconURL = "https://flora.pm/static/icons/favicon-32x32.png"; + URLTemplate = "https://flora.pm/search?q={searchTerms}"; + } + + # Discourse + { + Name = "NixOS Discourse"; + Alias = "@nd"; + IconURL = "https://nixos.org/favicon.ico"; + URLTemplate = "https://discourse.nixos.org/search?q={searchTerms}"; + } + { + Name = "Framework Discourse"; + Alias = "@fd"; + IconURL = "https://frame.work/favicon.ico"; + URLTemplate = "https://community.frame.work/search?q={searchTerms}"; + } + + # Misc + { + Name = "YouTube"; + Alias = "@yt"; + IconURL = "https://youtube.com/favicon.ico"; + SuggestURLTemplate = "http://suggestqueries.google.com/complete/search?q={searchTerms}&ds=yt"; + URLTemplate = "https://www.youtube.com/results?search_query={searchTerms}"; + } + { + Name = "Genius"; + Alias = "@geni"; + IconURL = "https://genius.com/favicon.ico"; + URLTemplate = "https://genius.com/search?q={searchTerms}"; + } + ]; + + profiles = { + default = { + settings = { + # "full-screen-api.ignore-widgets" = true; # limit fullscreen mode to window + }; + userChrome = '' + /* monofont tweak */ + #statuspanel-label { + font-family: monospace; + } + .urlbar-input-box { + font-family: monospace; + } + ''; + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ + addons.sponsorblock + addons.return-youtube-dislikes + addons.shinigami-eyes + addons.consent-o-matic + ]; + }; + + junk = { + id = 1; + inherit (config.programs.zen-browser.profiles.default) + settings + userChrome + ; + + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ addons.multi-account-containers ]; + + containers = { + raisin = { + color = "purple"; + icon = "fruit"; + id = 1; + }; + pomme = { + color = "red"; + icon = "fruit"; + id = 2; + }; + }; + }; + + # Isolate it because it's proprietary + tampermonkey = { + id = 2; + inherit (config.programs.zen-browser.profiles.default) + settings + userChrome + ; + + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ addons.tampermonkey ]; + }; + }; + }; +} diff --git a/nix/configurations/vanadium/nixos/connectivity.nix b/nix/configurations/vanadium/nixos/connectivity.nix index 9c5e8d05..92c3453b 100644 --- a/nix/configurations/vanadium/nixos/connectivity.nix +++ b/nix/configurations/vanadium/nixos/connectivity.nix @@ -57,7 +57,7 @@ extraHosts = '' # - # Generated from nixos configuration + # Generated from nixos configuartion # # This is the fascist one, just block it because I can't tell diff --git a/nix/disko/tungsten/btrfs.nix b/nix/disko/tungsten/btrfs.nix index 5c4adb48..66201153 100644 --- a/nix/disko/tungsten/btrfs.nix +++ b/nix/disko/tungsten/btrfs.nix @@ -54,7 +54,7 @@ # Use btrfs over ext4 for: # - compression - # nix store can be shrunk using this feature + # nix store can be shrinked using this feature # - more transparent partitions (subvolumes) # no more "I need more space here and not there" btrfs = { diff --git a/nix/homeModules/common/firefox.nix b/nix/homeModules/common/firefox.nix index a56d4256..18981f77 100644 --- a/nix/homeModules/common/firefox.nix +++ b/nix/homeModules/common/firefox.nix @@ -78,7 +78,7 @@ in # No "browser.urlbar.suggest.quicksuggest.sponsored" = false; - # Password manager + # Pasword manager "signon.rememberSignons" = false; "services.passwordSavingEnabled" = false; "pref.privacy.disable_button.view_passwords" = false; @@ -141,7 +141,7 @@ in "x-scheme-handler/unknown" = "firefox.desktop"; }; in - lib.mkIf cfg.enable { + lib.mkIf (cfg.enable && !config.programs.zen-browser.enable) { enable = true; associations.added = associations; defaultApplications = associations; diff --git a/nix/homeModules/common/zen-browser.nix b/nix/homeModules/common/zen-browser.nix new file mode 100644 index 00000000..4a691331 --- /dev/null +++ b/nix/homeModules/common/zen-browser.nix @@ -0,0 +1,68 @@ +{ + config, + lib, + ... +}: +let + cfg = config.programs.zen-browser; + + firefoxCfg = config.programs.firefox; +in +{ + programs.zen-browser = { + policies = firefoxCfg.policies; + + # "locked" semantic from zen (doesn't seem to be doing anything, attempted for zen-twilight 1.18t) + # https://github.com/0xc000022070/zen-browser-flake/tree/main#preferences + # + # To check which option is mapped to which about:config + # - back preference file + # cp .zen/default/prefs.js{,.bk} + # - click the buttons + # - diff it + # diff .zen/default/prefs.js{.bk,} + profiles.default = lib.mkMerge [ + firefoxCfg.profiles.default + { + # Zen specific + settings = { + "zen.theme.content-element-separation" = 0; # Remove "borders" around window + "zen.tabs.show-newtab-vertical" = false; + "zen.view.compact.toolbar-flash-popup" = true; + "zen.view.show-newtab-button-top" = false; + "zen.view.use-single-toolbar" = false; + "zen.tabs.ctrl-tab.ignore-pending-tabs" = true; # ctrl-tab ignore unloaded tabs + + # https://github.com/zen-browser/desktop/discussions/12025 + # This makes tabs sync across windows, which as annoying af + "zen.window-sync.enabled" = false; + }; + } + ]; + }; + + xdg.mimeApps = + let + associations = lib.genAttrs [ + "application/x-extension-shtml" + "application/x-extension-xhtml" + "application/x-extension-html" + "application/x-extension-xht" + "application/x-extension-htm" + # "x-scheme-handler/unknown" + # "x-scheme-handler/mailto" + "x-scheme-handler/chrome" + "x-scheme-handler/about" + "x-scheme-handler/https" + "x-scheme-handler/http" + "application/xhtml+xml" + # "application/json" + # "text/plain" + "text/html" + ] (_: cfg.package.meta.desktopFileName); + in + lib.mkIf cfg.enable { + associations.added = associations; + defaultApplications = associations; + }; +} diff --git a/nix/nixosModules/common/sudo-conf.nix b/nix/nixosModules/common/sudo-conf.nix index 01dd3c2a..35494b1b 100644 --- a/nix/nixosModules/common/sudo-conf.nix +++ b/nix/nixosModules/common/sudo-conf.nix @@ -9,6 +9,16 @@ enable = true; extraRules = [ { + # Invoke just with doas directly as a nixos-rebuild helper + # + # Specifiying just here is impractical, because + # - Use absolute path? + # Works only for a specific version of just binary. + # Also, for some reason, the rule won't match. + # - Use relative path? + # doas's docs says it searches in a "limited subset of PATH" if it's relative. + # I suspect that it doesn't search the PATH added ad-hoc by the nix-shell, also not a good solution. + # Also, for some reason, the rule won't match. users = [ ":wheel" ]; setEnv = [ "PATH" ]; } diff --git a/nix/nixosModules/common/system-nixconf.nix b/nix/nixosModules/common/system-nixconf.nix index 5f10bee3..cbce71b6 100644 --- a/nix/nixosModules/common/system-nixconf.nix +++ b/nix/nixosModules/common/system-nixconf.nix @@ -8,7 +8,7 @@ package = lib.mkDefault pkgs.nix; settings = { - # it is impossible to anwser to the prompt in nix-direnv, so we force it to off. + # it is impossible to anser in nix-direnv, so we force it to off. # https://github.com/nix-community/nix-direnv/issues/678 accept-flake-config = lib.mkForce false; diff --git a/npins/sources.json b/npins/sources.json index 6f3edaf9..15e6974a 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -368,6 +368,19 @@ "revision": "491197a6a5ef9c65a85c3eb1531786f32ffff5b3", "url": "https://github.com/Toqozz/wired-notify/archive/491197a6a5ef9c65a85c3eb1531786f32ffff5b3.tar.gz", "hash": "sha256-wxkeSF0/3FI0HSBKhZ2mlAAmFviNrZzdhjHqTfWP6h0=" + }, + "zen-browser": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "0xc000022070", + "repo": "zen-browser-flake" + }, + "branch": "main", + "submodules": false, + "revision": "0fac05e4b604c3304e7710a95572e78350fe9968", + "url": "https://github.com/0xc000022070/zen-browser-flake/archive/0fac05e4b604c3304e7710a95572e78350fe9968.tar.gz", + "hash": "sha256-jejW3u1bkqz0ObXZeiZqLQNwC7+MXb8/KMwf3VPQpRI=" } }, "version": 7 diff --git a/shell.nix b/shell.nix index 0fbd17f4..5b89b246 100644 --- a/shell.nix +++ b/shell.nix @@ -4,7 +4,6 @@ in { pkgs ? import sources.nixpkgs { overlays = map import [ - ./nix/overlays/agenix.nix ./nix/overlays/disko.nix ./nix/overlays/npins.nix ./nix/packages/overlay.nix @@ -19,10 +18,8 @@ pkgs.mkShell { packages = with pkgs; [ - agenix # from agenix repo npins # from npins repo disko # from disko flake - stow manage nixos-anywhere # comes from nixpkgs ]