Compare commits

..

3 commits

71 changed files with 700 additions and 1142 deletions

View file

@ -1,176 +0,0 @@
" Sourced from
" https://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.VIMEditing#:~:text=agda%2Dutf8%2Evim
" (Link is dead so use wayback machine)
" To add more
" https://www.compart.com/en/unicode/
" Superscripts
imap <buffer> \^0
imap <buffer> \^1 ¹
imap <buffer> \^2 ²
imap <buffer> \^3 ³
imap <buffer> \^4
imap <buffer> \^5
imap <buffer> \^6
imap <buffer> \^7
imap <buffer> \^8
imap <buffer> \^9
imap <buffer> \^+
imap <buffer> \^-
imap <buffer> \^=
imap <buffer> \^(
imap <buffer> \^)
imap <buffer> \^n
imap <buffer> \^l ˡ
imap <buffer> \^r ʳ
imap <buffer> \'
imap <buffer> \''
imap <buffer> \''' ‴
imap <buffer> \''''
" Subscripts
imap <buffer> \_0
imap <buffer> \_1
imap <buffer> \_2
imap <buffer> \_3
imap <buffer> \_4
imap <buffer> \_5
imap <buffer> \_6
imap <buffer> \_7
imap <buffer> \_8
imap <buffer> \_9
imap <buffer> \_+
imap <buffer> \_-
imap <buffer> \_=
imap <buffer> \_(
imap <buffer> \_)
" Arrows
imap <buffer> ->
imap <buffer> <--
imap <buffer> <-->
imap <buffer> ==>
imap <buffer> <==
imap <buffer> <==>
"
" Symbols from mathematics and logic, LaTeX style
imap <buffer> \forall
imap <buffer> \exists
imap <buffer> \in
imap <buffer> \ni
imap <buffer> \empty
imap <buffer> \prod
imap <buffer> \sum
imap <buffer> \le
imap <buffer> \ge
imap <buffer> \pm ±
imap <buffer> \subset
imap <buffer> \subseteq
imap <buffer> \supset
imap <buffer> \supseteq
imap <buffer> \setminus
imap <buffer> \cap
imap <buffer> \cup
imap <buffer> \int
imap <buffer> \therefore
imap <buffer> \qed
imap <buffer> \1 𝟙
imap <buffer> \N
imap <buffer> \Z
imap <buffer> \C
imap <buffer> \Q
imap <buffer> \R
imap <buffer> \E 𝔼
imap <buffer> \F 𝔽
imap <buffer> \to
imap <buffer> \mapsto
imap <buffer> \infty
imap <buffer> \equiv
imap <buffer> \cong
imap <buffer> \:=
imap <buffer> \=: ≕
imap <buffer> \ne
imap <buffer> \approx
imap <buffer> \perp
imap <buffer> \not ̷
imap <buffer> \ldots
imap <buffer> \cdots
imap <buffer> \cdot
imap <buffer> \circ
imap <buffer> \times ×
imap <buffer> \oplus
imap <buffer> \langle
imap <buffer> \rangle
" Math
imap <buffer> \monus
" Greek alphabet...
imap <buffer> \alpha α
imap <buffer> \beta β
imap <buffer> \gamma γ
imap <buffer> \delta δ
imap <buffer> \epsilon ε
imap <buffer> \zeta ζ
imap <buffer> \nu η
imap <buffer> \theta θ
imap <buffer> \iota ι
imap <buffer> \kappa κ
imap <buffer> \lambda λ
imap <buffer> \mu μ
imap <buffer> \nu ν
imap <buffer> \xi ξ
imap <buffer> \omicron ο
imap <buffer> \pi π
imap <buffer> \rho ρ
imap <buffer> \stigma ς
imap <buffer> \sigma σ
imap <buffer> \tau τ
imap <buffer> \upsilon υ
imap <buffer> \phi ϕ
imap <buffer> \varphi φ
imap <buffer> \chi χ
imap <buffer> \psi ψ
imap <buffer> \omega ω
imap <buffer> \Alpha Α
imap <buffer> \Beta Β
imap <buffer> \Gamma Γ
imap <buffer> \Delta Δ
imap <buffer> \Epsilon Ε
imap <buffer> \Zeta Ζ
imap <buffer> \Nu Η
imap <buffer> \Theta Θ
imap <buffer> \Iota Ι
imap <buffer> \Kappa Κ
imap <buffer> \Lambda Λ
imap <buffer> \Mu Μ
imap <buffer> \Nu Ν
imap <buffer> \Xi Ξ
imap <buffer> \Omicron Ο
imap <buffer> \Pi Π
imap <buffer> \Rho Ρ
imap <buffer> \Sigma Σ
imap <buffer> \Tau Τ
imap <buffer> \Upsilon Υ
imap <buffer> \Phi Φ
imap <buffer> \Chi Χ
imap <buffer> \Psi Ψ
imap <buffer> \Omega Ω
" default cornelis mapping
nnoremap <buffer> <leader>l :CornelisLoad<CR>
nnoremap <buffer> <leader>r :CornelisRefine<CR>
nnoremap <buffer> <leader>d :CornelisMakeCase<CR>
nnoremap <buffer> <leader>, :CornelisTypeContext<CR>
nnoremap <buffer> <leader>. :CornelisTypeContextInfer<CR>
nnoremap <buffer> <leader>n :CornelisSolve<CR>
nnoremap <buffer> <leader>a :CornelisAuto<CR>
nnoremap <buffer> gd :CornelisGoToDefinition<CR>
nnoremap <buffer> [/ :CornelisPrevGoal<CR>
nnoremap <buffer> ]/ :CornelisNextGoal<CR>
nnoremap <buffer> <C-A> :CornelisInc<CR>
nnoremap <buffer> <C-X> :CornelisDec<CR>

View file

@ -1 +0,0 @@
.config/nvim/ftplugin/agda.vim

View file

@ -7,7 +7,6 @@
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp-spell": { "branch": "master", "commit": "694a4e50809d6d645c1ea29015dad0c293f019d6" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"cornelis": { "branch": "master", "commit": "deda7eb399efe94cc49c645da7b6f94780fe0c19" },
"fidget.nvim": { "branch": "main", "commit": "64463022a1f2ff1318ab22a2ea4125ed9313a483" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "130beacf8a51f00aede9c31064c749136679a321" },
@ -22,7 +21,6 @@
"nvim-cmp": { "branch": "main", "commit": "d97d85e01339f01b842e6ec1502f639b080cb0fc" },
"nvim-colorizer.lua": { "branch": "master", "commit": "81e676d3203c9eb6e4c0ccf1eba1679296ef923f" },
"nvim-dap": { "branch": "master", "commit": "818cd8787a77a97703eb1d9090543a374f79a9ac" },
"nvim-hs.vim": { "branch": "develop", "commit": "d4a6b7278ae6a1fdc64e300c3ebc1e24719af342" },
"nvim-jdtls": { "branch": "master", "commit": "f73731b543f5971e0da9665eb1d7ceffe1fde71f" },
"nvim-lspconfig": { "branch": "master", "commit": "41ceb6bba3a40128b7841f5b7f5a9dae7201e823" },
"nvim-metals": { "branch": "main", "commit": "90dadd67bb1069ce1ba2a4dabf4e45da2807ba80" },
@ -41,6 +39,5 @@
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" },
"vim-textobj-user": { "branch": "master", "commit": "41a675ddbeefd6a93664a4dc52f302fe3086a933" },
"vimtex": { "branch": "master", "commit": "2e1bbabeb2c34bb17d7bc8cfdf8f95b16dd0db0c" }
}

View file

@ -120,19 +120,6 @@ local plugins = {
lazy = false,
version = "^2",
},
{
"agda/cornelis",
name = "cornelis",
ft = "agda",
init = function()
vim.g.cornelis_use_global_binary = 1
-- We don't use the default binding for shortcuts (see ftplugin)
-- Also, buffer reload is done in the ftplugin too
vim.g.cornelis_no_agda_input = 1
end,
dependencies = { "neovimhaskell/nvim-hs.vim", "kana/vim-textobj-user" },
version = "*",
},
{
"nvim-telescope/telescope.nvim",
branch = "0.1.x",

View file

@ -1,17 +0,0 @@
" agda related autocommands
function! CornelisLoadWrapper()
if exists(":CornelisLoad") ==# 2
CornelisLoad
endif
endfunction
au BufReadPre *.agda call CornelisLoadWrapper()
au BufReadPre *.lagda* call CornelisLoadWrapper()
au QuitPre *.agda :CornelisCloseInfoWindows
au QuitPre *.lagda* :CornelisCloseInfoWindows
" autoreload at file write
au BufWritePost *.agda execute "normal! :CornelisLoad\<CR>"
au BufWritePost *.lagda* execute "normal! :CornelisLoad\<CR>"

View file

@ -1,3 +1,3 @@
local leap = require("leap")
vim.keymap.set({ "n", "x", "o" }, "s", function() leap.leap { backward = false } end)
vim.keymap.set({ "n", "x", "o" }, "s", function() leap.leap() end)
vim.keymap.set("n", "S", function() leap.leap { backward = true } end)

View file

@ -24,8 +24,6 @@ local servers = {
["nil"] = { formatting = { command = { "nixfmt" } } },
},
},
zls = {},
}
vim.diagnostic.config {

View file

@ -52,9 +52,6 @@ telescope.setup {
live_grep = {
layout_config = { height = 0.7 },
},
buffers = {
sort_lastused = true,
},
resume = {
initial_mode = "normal",
},

View file

@ -1,6 +1,6 @@
let
sources = import ./npins;
in
{
sources ? import ./npins,
}:
{
# for repl sessions
inherit sources;

View file

@ -40,6 +40,7 @@ in
# use lix everywhere and wrap it with nom
../overlays/lix.nix
../overlays/nix-monitored.nix
];
};

View file

@ -1,11 +1,9 @@
# Protect my system from running out of storage or memory
let
totalStorage = 500;
in
{
# 500GB Storage
nix.settings = {
min-free = builtins.ceil (totalStorage * 0.2) * 1024 * 1024 * 1024;
max-free = builtins.ceil (totalStorage * 0.3) * 1024 * 1024 * 1024;
min-free = 50 * 1024 * 1024 * 1024;
max-free = 100 * 1024 * 1024 * 1024;
};
systemd.services.nix-daemon.serviceConfig = {
@ -13,4 +11,11 @@ in
MemoryMax = "90%";
OOMScoreAdjust = 500;
};
# 12 Cores, 64 GB RAM
# split into 4 jobs with 3C/16G
nix.settings = {
cores = 3;
max-jobs = 4;
};
}

View file

@ -45,6 +45,7 @@ in
# use lix everywhere and wrap it with nom
../overlays/lix.nix
../overlays/nix-monitored.nix
];
};

View file

@ -54,16 +54,21 @@ in
../overlays/wired-notify.nix
../overlays/wallpapers.nix
../overlays/nil.nix
../overlays/dix.nix
../overlays/eepy.nix
../overlays/calibre-no-mime.nix
../overlays/fcitx5-table-extra-taiwanese.nix
../overlays/ghostty-dev.nix
../overlays/npins.nix
../overlays/cornelis.nix
../overlays/iosevka
../overlays/iosevka.nix
../packages/overlay.nix
./vanadium/overlay.nix
./vanadium/kernel-overlay.nix
# removed, but I need it for PLFA!
../overlays/pin-emacs28.nix
# use lix everywhere and wrap it with nom
../overlays/lix.nix
../overlays/nix-monitored.nix
@ -95,7 +100,6 @@ in
./vanadium/nixos/input.nix
./vanadium/nixos/misc.nix
./vanadium/nixos/remote-builders.nix
./vanadium/nixos/display.nix
./vanadium/nixos/gui.nix
@ -116,7 +120,6 @@ in
# ../nixosModules/extra/secure_dns.nix
../nixosModules/extra/zram.nix
../nixosModules/extra/leana.nix
../nixosModules/extra/lean-nixos.nix
#
# Extern modules
@ -173,6 +176,7 @@ in
../homeModules/common/fzf.nix
../homeModules/common/git.nix
../homeModules/common/gpg.nix
../homeModules/common/kitty.nix
../homeModules/common/ghostty.nix
../homeModules/common/leana.nix
../homeModules/common/locale.nix

View file

@ -27,14 +27,10 @@
pkgs.taplo # toml
pkgs.vscode-langservers-extracted # JSON etc
pkgs.yaml-language-server # yaml
pkgs.cornelis # agda
# bash
pkgs.shfmt
pkgs.nodePackages.bash-language-server
# ghc
pkgs.hs-speedscope
];
programs.git = {
@ -75,7 +71,6 @@
"https://haskell-language-server.cachix.org"
"https://helix.cachix.org"
"https://cache.iog.io"
"https://ghostty.cachix.org"
];
extra-trusted-public-keys = [
"ghc-nix.cachix.org-1:ziC/I4BPqeA4VbtOFpFpu6D1t6ymFvRWke/lc2+qjcg="
@ -83,7 +78,6 @@
"haskell-language-server.cachix.org-1:juFfHrwkOxqIOZShtC4YC1uT1bBcq2RSvC7OMKx0Nz8="
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
"ghostty.cachix.org-1:QB389yTa6gTyneehvqG58y0WnHjQOqgnA+wBnpWWxns="
];
};
};

View file

@ -115,7 +115,6 @@ in
[
addons.sponsorblock
addons.return-youtube-dislikes
addons.shinigami-eyes
addons.consent-o-matic
];
};

View file

@ -17,46 +17,6 @@
monospace = [ "Iosevka" ];
emoji = [ "Noto Color Emoji" ];
};
configFile = {
thick-iosevka = {
enable = true;
# https://www.freedesktop.org/software/fontconfig/fontconfig-user.html
# https://gist.github.com/yuttie/adb22a6c07ef8e75d82e48d5484b7ad8
# https://github.com/N1k3YB/CS2FontChanger_ru/blob/5f1d8189220f42286d773c536ff83a49b2556da2/app.py#L227
#
# Use the following script to test
# for size in (seq 9 15)
# echo
# echo
# for weight in {regular,medium,bold}
# echo "weight=$weight:size=$size"
# fc-match "mono:weight=$weight:size=$size"
# end
# end | less
text = /* xml */ ''
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<match target="pattern">
<test name="family" compare="contains"><string>Iosevka</string></test>
<edit name="weight" mode="assign" binding="strong">
<if> <eq><name>weight</name><const>bold</const></eq> <!-- then --> <const>bold</const>
<if> <eq><name>weight</name><const>medium</const></eq> <!-- then --> <const>medium</const>
<!-- not bold nor medium -->
<if> <more><name>size</name><double>15</double></more> <!-- then --> <const>regular</const>
<if> <more><name>size</name><double>10</double></more> <!-- then --> <const>medium</const>
<!-- else --> <const>bold</const>
</if>
</if>
</if>
</if>
</edit>
</match>
</fontconfig>
'';
};
};
};
home.packages = [
pkgs.noto-fonts
@ -66,12 +26,12 @@
pkgs.noto-fonts-color-emoji
pkgs.noto-fonts-emoji-blob-bin
pkgs.ubuntu-classic
pkgs.Iosevka
pkgs.iosevka
];
home.file = {
".xscreensaver".source = "${./xscreensaver/.xscreensaver}";
".wallpaper".source = "${pkgs.wallpapers.packages.serial_experiments_lain.lain_windows_error}";
".wallpaper".source = "${pkgs.wallpapers.packages.knights_of_guinevere.fixing_gwen}";
};
xdg.configFile = {
"xmonad".source = "${./xmonad}";

View file

@ -20,7 +20,6 @@
home.packages = [
pkgs.ghc # my favorite calculator
pkgs.lsr # fast ls with io_uring
pkgs.nmap
pkgs.stow
pkgs.zip
@ -42,11 +41,13 @@
pkgs.macchanger
# The file picker is not ergonomic enough, sadly
pkgs.helix
# pkgs.helix
# pkgs.nushell
pkgs.ruler
pkgs.mini-calc
pkgs.eepy
pkgs.zbar
# pdf
pkgs.poppler-utils # pdfseparate, pdfunite
@ -68,32 +69,49 @@
pkgs.onefetch
pkgs.just
pkgs.nixfmt-rfc-style # formatter
pkgs.nurl # fetcher made easy
pkgs.nix-diff # debug cache miss
# nix tools
# # Alejandra handles inline comments poorly
# # https://github.com/kamadorueda/alejandra/issues/429
# pkgs.alejandra
pkgs.nixfmt-rfc-style
pkgs.nurl
pkgs.dix
pkgs.niv
pkgs.npins
pkgs.nix-tree # analyze closure
pkgs.nix-tree
pkgs.nix-output-monitor
pkgs.nh
# productivity / media
pkgs.evolution
pkgs.libreoffice
pkgs.calibre
pkgs.foliate # TODO: replace calibre with foliate
# pkgs.rawtherapee
pkgs.digikam
pkgs.gimp
pkgs.easyeffects
pkgs.nautilus
pkgs.sushi # space bar previewer
# pkgs.blender
# pkgs.inkscape
# pkgs.aseprite
# pkgs.xournalpp
pkgs.picard # music tagger
pkgs.mousai
pkgs.nicotine-plus
pkgs.picard # music tagger
pkgs.qbittorrent
pkgs.mkvtoolnix
pkgs.mousai
pkgs.localsend # file share with iOS
pkgs.minder # mindmap tool
pkgs.mkvtoolnix
# social
pkgs.iamb
pkgs.discord # keep the app for video calls
pkgs.signal-desktop
pkgs.tuba # mastodon GUI client
pkgs.emoji-picker-rs
pkgs.telegram-desktop # for archlinux china
# wm utilities
pkgs.xbrightness
@ -115,6 +133,10 @@
enable = true;
defaultEditor = true;
};
emacs = {
enable = true;
package = pkgs.unsafe-emacs28;
};
lazygit.enable = true;
fish = {
enable = true;
@ -153,7 +175,18 @@
mouse-scroll-multiplier = 1;
};
};
# chromium.enable = true;
kitty = {
enable = false;
font.size = 12; # sweet spot for framework 13
settings = {
shell = lib.getExe config.programs.fish.package;
# https://github.com/kovidgoyal/kitty/issues/1866
# https://sw.kovidgoyal.net/kitty/conf/#terminal-bell
linux_bell_theme = "elementary";
};
};
chromium.enable = true;
};
services = {

View file

@ -18,7 +18,7 @@
lib.makeBinPath [
ghc
pkgs.libnotify
pkgs.mullvad-status
pkgs.hrt-time
]
}"
'';

View file

@ -65,7 +65,20 @@ config =
, Run $
Com
"tomorrow"
[ "--target", "2026-02-02=monmaster"
[ "--target", "2025-08-14"
, "--target", "2025-08-21"
, "--target", "2025-08-22"
, "--target", "2025-09-16=snip snip"
, "--target", "2025-10-13=no teef"
, "--target", "2025-10-31=dragon book"
, "--target", "2025-11-19=scalpel"
, "--target", "2025-11-29=à deux"
-- , "--target", "2025-12-15=campus baguette"
-- , "--target", "2025-12-16=dragon book"
, "--target", "2025-12-18=baguette"
, "--target", "2025-12-30=seule"
, "--target", "2026-02-02=monmaster"
, "--target", "2026-02-22=dernier appel"
]
""
(60 &minute)
@ -89,7 +102,7 @@ config =
]
(6 &second)
, Run $ Com "powerprofilesctl" ["get"] "" (6 &second)
, Run $ Com "mullvad-status" [] "" (6 &second)
, Run $ Com "hrt-time" ["days"] "" (60 &minute)
, Run XMonadLog
, Run $
Weather
@ -111,9 +124,8 @@ config =
<> alignSep config
<> intercalate "|"
[ " %LFRN% "
, " %mullvad-status% "
, " %battery%, %powerprofilesctl%) "
, " %hereClock% (%tomorrow%) "
, " %hereClock% (%tomorrow%, %hrt-time%) "
]
}

View file

@ -23,10 +23,8 @@ instance LayoutClass SetMasterNTall a where
let ws' = W.Workspace t (unSetMasterNTall l) s
in (fmap . fmap . fmap) SetMasterNTall . runLayout ws'
handleMessage (SetMasterNTall l@(ResizableTall n0 d f s)) mess
| Just (SetMasterN n) <- fromMessage mess = pure $
if n0 /= n then Just $ SetMasterNTall $ ResizableTall n d f s
else Nothing
handleMessage (SetMasterNTall l@(ResizableTall _n0 d f s)) mess
| Just (SetMasterN n) <- fromMessage mess = pure $ Just $ SetMasterNTall $ ResizableTall n d f s
| otherwise = (fmap . fmap) SetMasterNTall . handleMessage l $ mess
description (SetMasterNTall l) = description l

View file

@ -3,8 +3,10 @@
import XMonad
import XMonad.Actions.CopyWindow
import XMonad.Actions.Navigation2D
import XMonad.Actions.Submap
import XMonad.Actions.SwapWorkspaces
import XMonad.Actions.Warp
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.InsertPosition
@ -31,9 +33,9 @@ import XMonad.Util.NamedScratchpad
import XMonad.Util.SpawnOnce
import Data.Char.Greek
import qualified Data.Map.Strict as M
import Data.Ratio
import Data.Semigroup
import qualified Data.Map.Strict as M
import System.Posix
import Graphics.X11.ExtraTypes.XF86
@ -46,6 +48,7 @@ main =
$ withSB xmobarConfig . docks
$ setEwmhActivateHook myActivateHook
$ ewmhFullscreen . ewmh
$ withNavigation2DConfig def
$ def
{ modMask = superMask
, borderWidth = 5
@ -77,7 +80,7 @@ myLayout =
$ smartSpacingWithEdge 5
$ reflectMsg . reflectHoriz
$ SetMasterNTall
$ ResizableTall 1 (1/10) (3/7) [1.2, 1, 1, 1.2]
$ ResizableTall 1 (1/10) (3/7) []
isSioyek :: Query Bool
isSioyek = className =? "sioyek"
@ -206,21 +209,11 @@ setMasterNEventHandleHook :: Event -> X All
setMasterNEventHandleHook ev =
let adjustMasterCount :: X ()
adjustMasterCount = do
ws <- gets windowset
-- Remove the floating windows in the count
let s :: Maybe (W.Stack Window)
s = W.stack $ W.workspace $ W.current ws
count :: Int
count =
length
$ filter (flip M.notMember (W.floating ws))
$ W.integrate' s
if count > 7 then sendMessage (SetMasterN 4)
else if count > 5 then sendMessage (SetMasterN 3)
else if count > 3 then sendMessage (SetMasterN 2)
else sendMessage (SetMasterN 1)
count <- gets $ length . W.integrate' . W.stack . W.workspace . W.current . windowset
if count <= 3 then sendMessage (SetMasterN 1)
else if count <= 5 then sendMessage (SetMasterN 2)
else if count <= 7 then sendMessage (SetMasterN 3)
else pure ()
in do
case ev of
MapRequestEvent{} -> adjustMasterCount
@ -280,6 +273,9 @@ removedKeybinds =
++ [ (superMask , n) | n <- [xK_1 .. xK_9] ]
++ [ (superMask .|. shiftMask, n) | n <- [xK_1 .. xK_9] ]
warpToWindowCenter :: X ()
warpToWindowCenter = warpToWindow 0.5 0.5
keybinds :: [((KeyMask, KeySym), X ())]
keybinds =
[
@ -319,20 +315,39 @@ keybinds =
, submap $ M.fromList
[ ((0, xK_t), withFocused $ windows . W.sink)
, ((0, xK_l), withFocused $ windows . flip W.float centeredFloat)
, ((0, xK_c), windows copyToAll)
, ((0, xK_k), killAllOtherCopies)
]
)
-- Switch between layers
, ((altMask, xK_s), switchLayer )
-- We override default focus shifting bindings to warp the cursor to the center of the new window.
-- This is especially useful because mag doesn't work well with focusFollowsMouse.
-- The order is important: focus shift, and then warp the cursor
--
-- Warp when focus shifts by binding, not by mouse (otherwise it's annoying)
-- Directional navigation of windows
, ((altMask, xK_l), windowGo R False >> warpToWindowCenter)
, ((altMask, xK_h), windowGo L False >> warpToWindowCenter)
, ((altMask, xK_k), windowGo U False >> warpToWindowCenter)
, ((altMask, xK_j), windowGo D False >> warpToWindowCenter)
-- Swap adjacent windows
, ((altMask .|. superMask, xK_l), windowSwap R False >> warpToWindowCenter)
, ((altMask .|. superMask, xK_h), windowSwap L False >> warpToWindowCenter)
, ((altMask .|. superMask, xK_k), windowSwap U False >> warpToWindowCenter)
, ((altMask .|. superMask, xK_j), windowSwap D False >> warpToWindowCenter)
]
-- Screenshots
++ (let 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), unGrab >> spawn fullscreen )
, ((superMask .|. shiftMask, xK_3 ), unGrab >> spawn fullscreen )
, ((superMask .|. shiftMask, xK_4 ), unGrab >> spawn withSelection)
, ((superMask .|. shiftMask, xK_5 ), unGrab >> spawn toFloat )
in [ ((0, xK_Print), spawn fullscreen )
, ((superMask .|. shiftMask, xK_3 ), spawn fullscreen )
, ((superMask .|. shiftMask, xK_4 ), spawn withSelection)
, ((superMask .|. shiftMask, xK_5 ), spawn toFloat )
]
)
@ -351,7 +366,7 @@ keybinds =
-- Launcher
++ (let launchFirefox = "zen"
launchDmenu = "dmenu_run -i -fn \"Iosevka-18\" -nb \"#36363a\" -nf \"#e2e2e4\" -sb \"#f7f7f8\" -sf \"#36363a\" -l 10"
launchDmenu = "dmenu_run -i -fn \"Iosevka-14\" -nb \"#36363a\" -nf \"#e2e2e4\" -sb \"#f7f7f8\" -sf \"#36363a\" -l 10"
lock = "xscreensaver-command -lock"
in [ ((controlMask .|. altMask, xK_m), namedScratchpadAction myScratchpads "cmus" )
, ((controlMask .|. altMask, xK_t), namedScratchpadAction myScratchpads "btop" )

View file

@ -115,7 +115,6 @@ in
[
addons.sponsorblock
addons.return-youtube-dislikes
addons.shinigami-eyes
addons.consent-o-matic
];
};

View file

@ -63,13 +63,6 @@
# This is the fascist one, just block it because I can't tell
0.0.0.0 nixos.wiki
# Gotta purify my smoos brain for a while
0.0.0.0 instagram.com
0.0.0.0 www.instagram.com
0.0.0.0 youtube.com
0.0.0.0 www.youtube.com
# The "people who you viewed can see you" thing is weird af
0.0.0.0 linkedin.com
0.0.0.0 www.linkedin.com
@ -83,19 +76,4 @@
services.mullvad-vpn.enable = true;
hardware.bluetooth.enable = true;
# Printing and auto-discovery of Wi-Fi printers
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
services.printing = {
enable = true;
drivers = with pkgs; [
cups-filters
cups-browsed
];
};
}

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }:
{ config, ... }:
{
system.stateVersion = "24.11";
@ -15,12 +15,6 @@
"pcie_aspm=off"
];
boot.plymouth = {
enable = true;
themePackages = [ pkgs.plymouth-blahaj-theme ];
theme = "blahaj";
};
# Cross building
# https://discourse.nixos.org/t/how-do-i-get-my-aarch64-linux-machine-to-build-x86-64-linux-extra-platforms-doesnt-seem-to-work/38106/2?u=leana8959
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];

View file

@ -1,31 +0,0 @@
let
supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
in
{ pkgs, ... }:
{
nix.buildMachines = [
# NOTE: these hosts need to be put in the .ssh/config of root.
# https://wiki.nixos.org/wiki/Distributed_build#Recommended_setup:_multi-user_Nix_local_%E2%80%93%3E_multi-user_Nix_remote
{
hostName = "pancake";
sshUser = "remotebuild";
speedFactor = 2;
system = pkgs.stdenv.hostPlatform.system;
maxJobs = 1;
inherit supportedFeatures;
}
{
hostName = "hetzner_benchmark";
sshUser = "remotebuild";
speedFactor = 12;
system = pkgs.stdenv.hostPlatform.system;
maxJobs = 3;
inherit supportedFeatures;
}
];
}

View file

@ -1,11 +1,8 @@
# Protect my system from running out of storage or memory
let
totalStorage = 930;
in
{
nix.settings = {
min-free = builtins.ceil (totalStorage * 0.2) * 1024 * 1024 * 1024;
max-free = builtins.ceil (totalStorage * 0.3) * 1024 * 1024 * 1024;
min-free = 50 * 1024 * 1024 * 1024;
max-free = 100 * 1024 * 1024 * 1024;
};
systemd.services.nix-daemon.serviceConfig = {
@ -13,4 +10,11 @@ in
MemoryMax = "90%";
OOMScoreAdjust = 500;
};
# 16 Cores, 32 GB RAM
# split into 4 jobs with 4C/8G
nix.settings = {
cores = 2;
max-jobs = 4;
};
}

View file

@ -16,14 +16,6 @@ infuse {
./patches/helix/W-as-write.patch
];
btop.__output.patches.__append = [
(final.fetchpatch {
name = "btrfs-io-graph";
url = "https://patch-diff.githubusercontent.com/raw/aristocratos/btop/pull/1285.patch";
hash = "sha256-za6B1EiOV1JqKMJwrNQo43RKChw+C4mmC8pcoxLLau4=";
})
];
# TODO:
# pinned branch of https://github.com/astrand/xclip/tree/xerror
# use this until #43 gets resolved properly

View file

@ -53,13 +53,10 @@ in
"browser.tabs.loadInBackground" = true;
"browser.ctrlTab.sortByRecentlyUsed" = false;
"layout.css.devPixelsPerPx" = 1.1;
"browser.startup.page" = 1;
"browser.link.open_newwindow" = 2; # open in new tab
"browser.translations.automaticallyPopup" = false;
"browser.tabs.closeWindowWithLastTab" = true;
"general.smoothScroll" = false; # makes me dizzy
"accessibility.typeaheadfind" = true; # type to find
"media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled" = true;
# open links in new window
# this works a lot better with xmonad where I have a bunch of windows
"browser.link.open_newwindow" = 2;
# Sponsored crap
# Yes

View file

@ -7,7 +7,7 @@
programs.fish = {
shellAbbrs = lib.mkMerge [
(lib.mkIf pkgs.stdenv.isLinux {
"," = "nix-shell --command $SHELL -p";
"," = "nix-shell -p";
})
];
@ -21,6 +21,10 @@
# idiot protection
chmod = "chmod --preserve-root";
chown = "chown --preserve-root";
# I can't make alias with a space, i.e. `nom shell`
nix-shell = "nix-shell --command fish";
nom-shell = "nom-shell --command fish";
})
];
};

View file

@ -11,17 +11,10 @@
#
# Script dependencies
#
home.packages = [
pkgs.nix-output-monitor # pretty ui for shells
];
home.packages = [ pkgs.vivid ];
programs = {
fd.enable = true;
fzf.enable = true;
# fd uses LS_COLORS
vivid = {
enable = true;
activeTheme = "solarized-light"; # similar to milou
};
};
#

View file

@ -1,7 +0,0 @@
function ls
if type -q lsr
command lsr $argv
else
command ls $argv
end
end

View file

@ -1,7 +1,7 @@
function nix-build
if type -q nom-build
command nom-build $argv
nom-build $argv
else
command nix-build $argv
nix-build $argv
end
end

View file

@ -1,7 +1,7 @@
function nix-shell
if type -q nom-shell
command nom-shell $argv
nom-shell $argv
else
command nix-shell $argv
nix-shell $argv
end
end

View file

@ -1,11 +0,0 @@
function nix
if [ $(count $argv) -lt 1 ]
command nix $argv
end
and if [ $argv[1] = "build" -o $argv[1] = "shell" ] && type -q nom
nom $argv
else
command nix $argv
end
end

View file

@ -83,4 +83,7 @@ set -x fzf_fd_opts --hidden --exclude=.git
# fzf-fish using patdiff would show incomplete diff, it is a bug
# don't do it
# fd uses LS_COLORS
set -x LS_COLORS (vivid -m 24-bit generate solarized-light) # similar to milou
set -g sponge_purge_only_on_exit true

View file

@ -10,7 +10,7 @@ in
{
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.nerd-fonts.IosevkaTerm
pkgs.nerd-fonts.iosevka
];
programs.ghostty.settings = {
@ -21,15 +21,13 @@ in
resize-overlay = "never";
# Fonts
font-family = "IosevkaTerm NFM";
font-family = "Iosevka NFM";
adjust-cursor-thickness = 2;
keybind = [
"ctrl+shift+==increase_font_size:1"
"ctrl+-=decrease_font_size:1"
];
mouse-hide-while-typing = true;
# Theme
background = "#fdf6e3";
foreground = "#073642";

View file

@ -5,9 +5,6 @@
}:
{
# git plugins
programs.git = {
lfs.enable = true;
};
programs.patdiff = {
enable = lib.mkDefault true;
enableGitIntegration = lib.mkDefault true;
@ -20,11 +17,7 @@
in
lib.mkIf patdiffCfg.enable {
settings = {
git.paging = [
{
externalDiffCommand = "${lib.getExe' patdiffCfg.package "patdiff-git-wrapper"}";
}
];
git.paging.externalDiffCommand = "${lib.getExe' patdiffCfg.package "patdiff-git-wrapper"}";
};
};

View file

@ -5,17 +5,13 @@
gpg-agent.pinentry.package = pkgs.pinentry-tty;
};
# Fun video btw
# https://media.ccc.de/v/39c3-to-sign-or-not-to-sign-practical-vulnerabilities-i
programs.gpg.publicKeys =
let
fromUrl =
{
url,
hash,
# https://security.stackexchange.com/a/69089
# One lower than ultimate (introducer in the web of trust) is good enough.
trust ? 4,
trust ? 5,
}:
{
source = pkgs.fetchurl { inherit url hash; };
@ -31,7 +27,6 @@
{
user = "leana8959";
hash = "sha256-Y+v/8bLkyUIe4vjToChQP3ChPxRV/DqI72OTsx6F0oo=";
trust = 5;
}
{
user = "vanilla-extracts";
@ -41,6 +36,10 @@
user = "jappeace";
hash = "sha256-wJ4hiE7M7dcEMaE8waNZEi+tybpVIsFzoeDJhIIaLhk=";
}
{
user = "gautaz";
hash = "sha256-j0I9l8uKfzKNrc2qveFi5mkRppxL36+BUEqvFPs6vqA=";
}
{
user = "confusedkernel";
hash = "sha256-9DdtDAcv+2Z0jJMSLAXbp5ne8uHYj5V/lNGi0kKSdv4=";

View file

@ -0,0 +1,62 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.programs.kitty;
in
{
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.nerd-fonts.iosevka
];
programs.kitty = {
font.name = "family=\"Iosevka NFM\"";
settings = rec {
# Make text thicker
text_composition_strategy = lib.mkIf pkgs.stdenv.isLinux "2.8 0";
# Don't prompt
confirm_os_window_close = 0;
# Never underline links
underline_hyperlinks = "never";
# No default bindings
clear_all_shortcuts = "no";
# cursor
cursor_blink_interval = 1;
cursor_stop_blinking_after = 15; # always blink
# theme
background = "#fdf6e3";
foreground = "#073642";
cursor = "#000000";
cursor_text_color = "#ffffff";
selection_foreground = foreground;
selection_background = "#dbcba3";
color0 = "#073642";
color8 = "#4d4d4d";
color1 = "#af005f";
color9 = "#d33682";
color2 = "#859900";
color10 = "#29a350";
color3 = "#ba9b23";
color11 = "#d6b429";
color4 = "#268bd2";
color12 = "#469edd";
color5 = "#5f5faf";
color13 = "#6060d1";
color6 = "#2aa198";
color14 = "#4bccc1"; # a platupus? perry the platupus?
color7 = "#a0a1a7";
color15 = "#eeeadd";
};
};
};
}

View file

@ -9,7 +9,6 @@ let
in
{
home.packages = lib.mkIf cfg.enable [
pkgs.zbar
pkgs.pwgen
pkgs.diceware
];

View file

@ -108,7 +108,7 @@ style = "blue"
#################### Right hand side ####################
[cmd_duration]
min_time = 2_000
min_time = 60_000
show_milliseconds = true
style = 'blue'
format = '([$duration]($style) )'

View file

@ -1,6 +1,6 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.Iosevka ];
home.packages = [ pkgs.iosevka ];
services.wired = {
config = "${./wired.ron}";
};

View file

@ -1,17 +1,53 @@
{
pkgs,
config,
lib,
...
}:
let
cfg = config.programs.zen-browser;
inherit (pkgs) nur;
firefoxCfg = config.programs.firefox;
cfg = config.programs.zen-browser;
in
{
programs.zen-browser = {
policies = firefoxCfg.policies;
# https://mozilla.github.io/policy-templates
# The following have more complex logic, keep them as policies and not profiles
policies = {
RequestedLocales = [
"fr-FR" # for fuck sake stop showing me translated version of French gov sites
"zh-TW"
"en-US"
];
SearchEngines = {
Remove = [
"Google"
"Bing"
"DuckDuckGo"
"Qwant"
"eBay"
"Perplexity"
];
Default = "DuckDuckGo Lite";
Add = [
{
Name = "DuckDuckGo Lite";
URLTemplate = "https://lite.duckduckgo.com/lite/search?q={searchTerms}";
}
];
};
NoDefaultBookmarks = true;
DisplayMenuBar = "never";
DisplayBookmarksToolbar = "never";
DNSOverHTTPS = {
Enabled = false;
};
};
# https://searchfox.org/mozilla-central/source/browser/components/enterprisepolicies/Policies.sys.mjs
# Some policies can be rewritten to profiles configuration
#
# "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
#
@ -21,20 +57,91 @@ in
# - click the buttons
# - diff it
# diff .zen/default/prefs.js{.bk,}
profiles.default = lib.mkMerge [
firefoxCfg.profiles.default
{
profiles.default = {
settings = {
# 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
};
}
];
"zen.theme.content-element-separation" = 0; # Remove "borders" around window
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.tabs.loadInBackground" = true;
"browser.ctrlTab.sortByRecentlyUsed" = false;
"layout.css.devPixelsPerPx" = 1.1;
"browser.startup.page" = 1;
"browser.translations.automaticallyPopup" = false;
"browser.tabs.closeWindowWithLastTab" = true;
"general.smoothScroll" = false;
# open links in new window
# this works a lot better with xmonad where I have a bunch of windows
"browser.link.open_newwindow" = 2;
# 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;
"browser.ml.chat.page" = false;
"browser.ml.chat.shortcuts" = false;
"browser.ml.chat.sidebar" = false;
# Prevent WebRTC leak
# https://mullvad.net/en/help/webrtc
"media.peerconnection.enabled" = false;
};
extensions.packages =
let
addons = nur.repos.rycee.firefox-addons;
in
[
addons.ublock-origin
addons.privacy-badger
addons.user-agent-string-switcher
/*
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
];
};
};
xdg.mimeApps =

View file

@ -2,7 +2,7 @@
# This loads the list of networks as a NixOS wpa_supplicant compatible attrset
#
# View the example config
# less $(nix-build --no-out-link '<nixpkgs>' -A 'wpa_supplicant')/share/doc/wpa_supplicant/wpa_supplicant.conf.example
# less $(nix-build --no-out-link -E '(import <nixpkgs> {}).wpa_supplicant')/share/doc/wpa_supplicant/wpa_supplicant.conf.example
let
sources = import ../../npins;
lib = import (sources.nixpkgs + "/lib");

View file

@ -8,10 +8,6 @@
package = lib.mkDefault pkgs.nix;
settings = {
# 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;
# Try to have at least 10GB of space by default
min-free = lib.mkDefault (5 * 1024 * 1024 * 1024);
max-free = lib.mkDefault (10 * 1024 * 1024 * 1024);

View file

@ -1,14 +0,0 @@
# disable unused tools on nixos systems (that I don't use)
{
system.tools = {
# build a network of virtual machines? never used this.
nixos-build-vms.enable = false;
# only useful for installer
nixos-generate-config.enable = false;
nixos-install.enable = false;
# interactively show options, just use the repl instead
nixos-option.enable = false;
};
}

View file

@ -0,0 +1,11 @@
# cailbre is obnoxious about opening HTML
final: prev: {
calibre = final.symlinkJoin {
name = "calibre";
paths = [ prev.calibre ];
buildInputs = [ final.makeWrapper ];
postBuild = ''
rm -r $out/share/mime
'';
};
}

View file

@ -1,10 +0,0 @@
# The Agda support for Vim
let
sources = import ../../npins;
in
# If this is updated, we break split on case support for PLFA.
# PLFA uses 2.7.0
# https://github.com/agda/cornelis/issues/169
assert sources.cornelis.version == "v2.7.1";
sources.cornelis.asFlake.overlays.cornelis

6
nix/overlays/dix.nix Normal file
View file

@ -0,0 +1,6 @@
let
sources = import ../../npins;
in
final: _: {
dix = sources.dix.asFlake.packages.${final.stdenv.hostPlatform.system}.default;
}

6
nix/overlays/eepy.nix Normal file
View file

@ -0,0 +1,6 @@
let
sources = import ../../npins;
in
final: _: {
eepy = sources.eepy.asFlake.packages.${final.stdenv.hostPlatform.system}.default;
}

View file

@ -1,20 +1,7 @@
let
sources = import ../../npins;
in
final: prev:
let
inherit (final) lib;
in
{
final: prev: {
# Dev version of ghostty, "tip"
ghostty =
let
shortRev = lib.substring 0 8 sources.ghostty-dev.revision;
in
# NOTE:
# ghostty-dev internally builds a derivation used as a cache.
# Overriding the pname would cause cache mismatch.
sources.ghostty-dev.asFlake.packages.${final.stdenv.hostPlatform.system}.default.override {
revision = shortRev;
};
ghostty = sources.ghostty-dev.asFlake.packages.${final.stdenv.hostPlatform.system}.default;
}

174
nix/overlays/iosevka.nix Normal file
View file

@ -0,0 +1,174 @@
final: prev: rec {
nerd-fonts =
let
mkNerdFont = final.callPackage ../lib/mkNerdFont.nix { };
in
prev.nerd-fonts
// {
iosevka = mkNerdFont {
font = iosevka;
patcherArgs = [
"--complete"
"--careful"
"--name {/.}-NFM"
"--mono"
];
};
};
iosevka = prev.iosevka.override {
set = "";
# Guide: https://github.com/be5invis/Iosevka/blob/main/doc/custom-build.md
privateBuildPlan = {
family = "Iosevka";
serifs = "sans";
spacing = "normal";
# Otherwise kitty behaves funny with ligature
# noLigation = true;
exportGlyphNames = true;
variants.design = {
ampersand = "et-tailed";
capital-q = "crossing";
capital-z = "straight-serifless-with-crossbar";
cent = "open";
dollar = "open";
lig-double-arrow-bar = "with-notch";
lig-equal-chain = "with-notch";
lig-hyphen-chain = "with-notch";
lig-plus-chain = "with-notch";
lig-single-arrow-bar = "with-notch";
lower-lambda = "tailed-turn";
number-sign = "slanted";
percent = "rings-continuous-slash-also-connected";
seven = "straight-serifless-crossbar";
};
variants.italic = {
v = "cursive-serifless";
w = "cursive-serifless";
};
weights = {
# Build 580, but indicate 400 in output
Regular.shape = 580;
Regular.menu = 400;
Regular.css = 400;
Bold.shape = 700;
Bold.menu = 700;
Bold.css = 700;
};
widths = {
Normal.shape = 500;
Normal.menu = 5;
Normal.css = "normal";
Extended.shape = 600;
Extended.menu = 7;
Extended.css = "expanded";
};
slopes = {
Upright.angle = 0;
Upright.css = "normal";
Upright.menu = "upright";
Upright.shape = "upright";
Italic.angle = 9.4;
Italic.shape = "italic";
Italic.menu = "italic";
Italic.css = "italic";
};
# The ligatures are defined based on Haskell and Nix usages.
#
# Follow: <https://github.com/be5invis/Iosevka/blob/main/params/ligation-set.toml> for more details
ligations.enables = [
"arrow-l" # Left-pointing arrows
# "arrow-l-hyphen" # Left-pointing arrows with hyphen-minus (-) being the rod
# "arrow-l-equal" # Left-pointing arrows with equal sign (=) being the rod
# "arrow-l-wave" # Left-pointing arrows with tilde (~) being the rod
"arrow-r" # Right-pointing arrows
# "arrow-r-hyphen" # Right-pointing arrows with hyphen-minus (-) being the rod
# "arrow-r-equal" # Right-pointing arrows with equal sign (=) being the rod
# "arrow-r-wave" # Right-pointing arrows with tilde (~) being the rod
"arrow-lr" # Dual-pointing arrows
# "arrow-lr-hyphen" # Dual-pointing arrows with hyphen-minus (-) being the rod
# "arrow-lr-equal" # Dual-pointing arrows with equal sign (=) being the rod
# "arrow-lr-wave" # Dual-pointing arrows with tilde (~) being the rod
"counter-arrow-l" # Left-pointing counter-arrows
# "counter-arrow-l-hyphen" # Left-pointing counter-arrows with hyphen-minus (-) being the rod
# "counter-arrow-l-equal" # Left-pointing counter-arrows with equal sign (=) being the rod
# "counter-arrow-l-wave" # Left-pointing counter-arrows with tilde (~) being the rod
"counter-arrow-r" # Right-pointing counter-arrows
# "counter-arrow-r-hyphen" # Right-pointing counter-arrows with hyphen-minus (-) being the rod
# "counter-arrow-r-equal" # Right-pointing counter-arrows with equal sign (=) being the rod
# "counter-arrow-r-wave" # Right-pointing counter-arrows with tilde (~) being the rod
# "eqeqeq" # Enable special ligation for === with triple lines
"eqeq" # Enable ligation for == and ===
"lteq" # Enable ligation for <= as less-than-or-equal sign
# "eqlt" # Enable ligation for =< as less-than-or-equal sign
"gteq" # Enable ligation for >= as greater-than-or-equal sign
# "lteq-separate" # Display <= as separate shape
# "eqlt-separate" # Display =< as separate shape
# "gteq-separate" # Display >= as separate shape
# "exeqeqeq" # Enable special ligation for !=== with triple lines
# "exeqeq" # Enable special ligation for !== with triple lines
# "eqexeq" # Enable special ligation for =!= with triple lines
# "eqexeq-dl" # Enable special ligation for =!= with double lines
# "exeq" # Enable ligation for != and !==
# "tildeeq" # Enable ligation for ~= as inequality
# "eqslasheq" # Enable special triple-line ligation for =/= as inequality
"slasheq" # Enable ligation for /= and =/= as inequality
"trig" # Enable ligation for <|, |> , <||, and other bar-and-angle-bracket symbols
# "ltgt-ne" # Enable ligation for <> as inequality
"ltgt-diamond" # Enable ligation for <> as diamond
# "ltgt-diamond-tag" # Enable ligation for <> as diamond-shaped empty HTML/XML tag
# "ltgt-slash-tag" # Enable ligation for </, /> and </>
# "brst" # Center asterisk in (* and *)
"slash-asterisk" # Shift asterisk in /* and */
"kern-dotty" # Move connecting dotty punctuations closer, like for ::, :: # and ...
# "kern-bars" # Move consecutive bars closer, like for ||, ||| and //
"center-ops" # Vertically align some of the operators (like *) to the center position it is before or after a "center" operator (like +)
# These put -. to the same height
# "center-op-trigger-plus-minus-l" # Plus (+) and Minus (-) will trigger other operator characters at left to be centered
# "center-op-trigger-plus-minus-r" # Plus (+) and Minus (-) will trigger other operator characters at right to be centered
# These put *= to the same height
# "center-op-trigger-equal-l" # Equal (=) will trigger other operator characters at left to be centered
# "center-op-trigger-equal-r" # Equal (=) will trigger other operator characters at right to be centered
"center-op-trigger-bar-l" # Bars (|) will trigger other operator characters at left to be centered
"center-op-trigger-bar-r" # Bars (|) will trigger other operator characters at right to be centered
"center-op-trigger-angle-inside" # Less (<) and Greater (>) will trigger other operator characters at inside to be centered
"center-op-trigger-angle-outside" # Less (<) and Greater (>) will trigger other operator characters at outside to be centered
# "center-op-influence-dot" # Treat dot (.) as operator and perform chained centering
"center-op-influence-colon" # Treat colon (:) as operator and perform chained centering
"tilde-tilde" # Make 2 or more contiguous ASCII tildes (like ~~, ~~~ and ~~~~) connected as a wave line
# "tilde-tilde-tilde" # Make 3 or more contiguous ASCII tildes (like ~~~ and ~~~~) connected as a wave line
# "minus-minus" # Make 2 or more contiguous hyphen-minuses (like --, --- and ----) connected as a straight solid line
# "minus-minus-minus" # Make 3 or more contiguous hyphen-minuses (like --- and ----) connected as a straight solid line
# "plus-plus" # Make 2 or more contiguous plus signs (like ++, +++ and ++++) connected.
# "plus-plus-plus" # Make 3 or more contiguous plus signs (like +++ and ++++) connected.
# "underscore-underscore" # Make 2 or more contiguous underscores (like __, ___ and ____) connected
# "underscore-underscore-underscore" # Make 3 or more contiguous underscores (like ___ and ____) connected
# "hash-hash" # Make 2 or more contiguous hash signs (number signs) (like ##, ### and ####) connected
# "hash-hash-hash" # Make 3 or more contiguous hash signs (number signs) (like ## and ###) connected
# "logic" # Enable ligation for /\ and \/
# "llgg" # Enable ligation for <<, >> and other angle-bracket chaining
# "llggeq" # Enable ligation for <<=, >>= as shift operator
# "html-comment" # Enable ligation for <!-- and <!---
# "colon-greater-as-colon-arrow:" Transform :> into : and a narrow arrow
# "brace-bar" # Enable ligation for {| and |}
"brack-bar" # Enable ligation for [| and |]
];
};
};
}

View file

@ -1,58 +0,0 @@
# A thicker family of custom build of iosevkas. Optimized for Haskell and Nix.
final: prev:
let
inherit (prev) lib;
iosevkaConfig = final: import ./privateBuildPlan.nix;
mkIosevka =
mergedConfig:
prev.iosevka.override {
# HACK:
# Used to construct pname internally, appended to "Iosevka".
# We drop the prefix so it is not duplicated.
set = lib.removePrefix "Iosevka" mergedConfig.family;
privateBuildPlan = mergedConfig;
};
mkNerdFont =
font:
final.callPackage ../../lib/mkNerdFont.nix { } {
inherit font;
patcherArgs = [
"--complete"
"--careful"
"--name {/.}-NFM"
"--mono"
];
};
identityOverlay = _: _: { };
overlays =
let
# Useless complexity just for the fun
n-airyToList = acc: x: {
value = acc ++ [ x ];
__functor = self: n-airyToList self.value;
};
combinations = lib.crossLists (n-airyToList [ ]) [
(import ./spacings.nix)
([ identityOverlay ] ++ import ./variants.nix)
];
in
map ({ value, ... }: lib.composeManyExtensions value) combinations;
iosevkas = lib.genAttrs' overlays (
overlay:
let
mergedConfig = lib.fix (lib.extends overlay iosevkaConfig);
in
lib.nameValuePair mergedConfig.family (mkIosevka mergedConfig)
);
iosevka-nerds = builtins.mapAttrs (_: mkNerdFont) iosevkas;
in
iosevkas
// {
nerd-fonts = prev.nerd-fonts // iosevka-nerds;
}

View file

@ -1,147 +0,0 @@
# Guide: https://github.com/be5invis/Iosevka/blob/main/doc/custom-build.md
{
family = "Iosevka";
serifs = "sans";
variants.design = {
ampersand = "et-tailed";
capital-q = "crossing";
capital-z = "straight-serifless-with-crossbar";
cent = "open";
dollar = "open";
lig-double-arrow-bar = "with-notch";
lig-equal-chain = "with-notch";
lig-hyphen-chain = "with-notch";
lig-plus-chain = "with-notch";
lig-single-arrow-bar = "with-notch";
lower-lambda = "tailed-turn";
# number-sign = "slanted";
percent = "rings-continuous-slash-also-connected";
seven = "straight-serifless-crossbar";
brace = "curly";
};
variants.italic = {
v = "cursive-serifless";
w = "cursive-serifless";
};
weights = {
Regular.shape = 420;
Regular.menu = 400;
Regular.css = 400;
Medium.shape = 550;
Medium.menu = 500;
Medium.css = 500;
Bold.shape = 700;
Bold.menu = 700;
Bold.css = 700;
};
widths = {
Normal.shape = 500;
Normal.menu = 5;
Normal.css = "normal";
};
slopes = {
Upright.angle = 0;
Upright.css = "normal";
Upright.menu = "upright";
Upright.shape = "upright";
Italic.angle = 9.4;
Italic.shape = "italic";
Italic.menu = "italic";
Italic.css = "italic";
};
# The ligatures are defined based on Haskell and Nix usages.
#
# Follow: <https://github.com/be5invis/Iosevka/blob/main/params/ligation-set.toml> for more details
ligations.enables = [
"arrow-l" # Left-pointing arrows
# "arrow-l-hyphen" # Left-pointing arrows with hyphen-minus (-) being the rod
# "arrow-l-equal" # Left-pointing arrows with equal sign (=) being the rod
# "arrow-l-wave" # Left-pointing arrows with tilde (~) being the rod
"arrow-r" # Right-pointing arrows
# "arrow-r-hyphen" # Right-pointing arrows with hyphen-minus (-) being the rod
# "arrow-r-equal" # Right-pointing arrows with equal sign (=) being the rod
# "arrow-r-wave" # Right-pointing arrows with tilde (~) being the rod
"arrow-lr" # Dual-pointing arrows
# "arrow-lr-hyphen" # Dual-pointing arrows with hyphen-minus (-) being the rod
# "arrow-lr-equal" # Dual-pointing arrows with equal sign (=) being the rod
# "arrow-lr-wave" # Dual-pointing arrows with tilde (~) being the rod
"counter-arrow-l" # Left-pointing counter-arrows
# "counter-arrow-l-hyphen" # Left-pointing counter-arrows with hyphen-minus (-) being the rod
# "counter-arrow-l-equal" # Left-pointing counter-arrows with equal sign (=) being the rod
# "counter-arrow-l-wave" # Left-pointing counter-arrows with tilde (~) being the rod
"counter-arrow-r" # Right-pointing counter-arrows
# "counter-arrow-r-hyphen" # Right-pointing counter-arrows with hyphen-minus (-) being the rod
# "counter-arrow-r-equal" # Right-pointing counter-arrows with equal sign (=) being the rod
# "counter-arrow-r-wave" # Right-pointing counter-arrows with tilde (~) being the rod
# "eqeqeq" # Enable special ligation for === with triple lines
"eqeq" # Enable ligation for == and ===
"lteq" # Enable ligation for <= as less-than-or-equal sign
# "eqlt" # Enable ligation for =< as less-than-or-equal sign
"gteq" # Enable ligation for >= as greater-than-or-equal sign
# "lteq-separate" # Display <= as separate shape
# "eqlt-separate" # Display =< as separate shape
# "gteq-separate" # Display >= as separate shape
# "exeqeqeq" # Enable special ligation for !=== with triple lines
# "exeqeq" # Enable special ligation for !== with triple lines
# "eqexeq" # Enable special ligation for =!= with triple lines
# "eqexeq-dl" # Enable special ligation for =!= with double lines
# "exeq" # Enable ligation for != and !==
# "tildeeq" # Enable ligation for ~= as inequality
# "eqslasheq" # Enable special triple-line ligation for =/= as inequality
"slasheq" # Enable ligation for /= and =/= as inequality
"trig" # Enable ligation for <|, |> , <||, and other bar-and-angle-bracket symbols
# "ltgt-ne" # Enable ligation for <> as inequality
"ltgt-diamond" # Enable ligation for <> as diamond
# "ltgt-diamond-tag" # Enable ligation for <> as diamond-shaped empty HTML/XML tag
# "ltgt-slash-tag" # Enable ligation for </, /> and </>
"brst" # Center asterisk in (* and *)
"slash-asterisk" # Shift asterisk in /* and */
"kern-dotty" # Move connecting dotty punctuations closer, like for ::, :: # and ...
# "kern-bars" # Move consecutive bars closer, like for ||, ||| and //
"center-ops" # Vertically align some of the operators (like *) to the center position it is before or after a "center" operator (like +)
# These put -. to the same height
# "center-op-trigger-plus-minus-l" # Plus (+) and Minus (-) will trigger other operator characters at left to be centered
# "center-op-trigger-plus-minus-r" # Plus (+) and Minus (-) will trigger other operator characters at right to be centered
# These put *= to the same height
# "center-op-trigger-equal-l" # Equal (=) will trigger other operator characters at left to be centered
# "center-op-trigger-equal-r" # Equal (=) will trigger other operator characters at right to be centered
"center-op-trigger-bar-l" # Bars (|) will trigger other operator characters at left to be centered
"center-op-trigger-bar-r" # Bars (|) will trigger other operator characters at right to be centered
"center-op-trigger-angle-inside" # Less (<) and Greater (>) will trigger other operator characters at inside to be centered
"center-op-trigger-angle-outside" # Less (<) and Greater (>) will trigger other operator characters at outside to be centered
# "center-op-influence-dot" # Treat dot (.) as operator and perform chained centering
"center-op-influence-colon" # Treat colon (:) as operator and perform chained centering
"tilde-tilde" # Make 2 or more contiguous ASCII tildes (like ~~, ~~~ and ~~~~) connected as a wave line
# "tilde-tilde-tilde" # Make 3 or more contiguous ASCII tildes (like ~~~ and ~~~~) connected as a wave line
# "minus-minus" # Make 2 or more contiguous hyphen-minuses (like --, --- and ----) connected as a straight solid line
# "minus-minus-minus" # Make 3 or more contiguous hyphen-minuses (like --- and ----) connected as a straight solid line
# "plus-plus" # Make 2 or more contiguous plus signs (like ++, +++ and ++++) connected.
# "plus-plus-plus" # Make 3 or more contiguous plus signs (like +++ and ++++) connected.
# "underscore-underscore" # Make 2 or more contiguous underscores (like __, ___ and ____) connected
# "underscore-underscore-underscore" # Make 3 or more contiguous underscores (like ___ and ____) connected
# "hash-hash" # Make 2 or more contiguous hash signs (number signs) (like ##, ### and ####) connected
# "hash-hash-hash" # Make 3 or more contiguous hash signs (number signs) (like ## and ###) connected
# "logic" # Enable ligation for /\ and \/
# "llgg" # Enable ligation for <<, >> and other angle-bracket chaining
# "llggeq" # Enable ligation for <<=, >>= as shift operator
# "html-comment" # Enable ligation for <!-- and <!---
# "colon-greater-as-colon-arrow:" Transform :> into : and a narrow arrow
# "brace-bar" # Enable ligation for {| and |}
"brack-bar" # Enable ligation for [| and |]
"markdown-checkboxes" # Enable ligation for Markdown checkboxes like - [ ] and - [x]
];
}

View file

@ -1,24 +0,0 @@
let
list = [
{
adjustFamily = old: old;
spacing = "normal";
}
# Iosevka + Ghostty makes "…" display in a odd way.
# We use "term" width to avoid this.
# https://github.com/ghostty-org/ghostty/discussions/10335
{
adjustFamily = old: old + "Term";
spacing = "term";
}
];
in
map (
{ adjustFamily, spacing }:
final: prev: {
family = adjustFamily prev.family;
inherit spacing;
}
) list

View file

@ -1,93 +0,0 @@
let
list = [
{
code = "ss01";
name = "Andale Mono";
}
{
code = "ss02";
name = "Anonymous Pro";
}
{
code = "ss03";
name = "Consolas";
}
{
code = "ss04";
name = "Menlo";
}
{
code = "ss05";
name = "Fira Mono";
}
{
code = "ss06";
name = "Liberation Mono";
}
{
code = "ss07";
name = "Monaco";
}
{
code = "ss08";
name = "Pragmata Pro";
}
{
code = "ss09";
name = "Source Code Pro";
}
{
code = "ss10";
name = "Envy Code R";
}
{
code = "ss11";
name = "X Window";
}
{
code = "ss12";
name = "Ubuntu Mono";
}
{
code = "ss13";
name = "Lucida";
}
{
code = "ss14";
name = "JetBrains Mono";
}
{
code = "ss15";
name = "IBM Plex Mono";
}
{
code = "ss16";
name = "PT Mono";
}
{
code = "ss17";
name = "Recursive Mono";
}
{
code = "ss18";
name = "Input Mono";
}
{
code = "ss20";
name = "Curly";
}
];
in
map (
{ name, code }:
let
shortName = builtins.replaceStrings [ " " ] [ "" ] name;
in
final: prev: {
family = prev.family + "${shortName}";
variants = prev.variants // {
inherits = code;
};
}
) list

View file

@ -1,6 +0,0 @@
let
sources = import ../../npins;
in
final: _: {
npins = import sources.npins { pkgs = final; };
}

View file

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

View file

@ -0,0 +1,7 @@
let
sources = import ../../npins;
in
_: _: {
# Isabelle version 2023
isabelle-2023 = (import sources.pin-isabelle { }).isabelle;
}

View file

@ -0,0 +1,8 @@
let
sources = import ../../npins;
in
_: _: {
# Wireshark bug
# https://gitlab.com/wireshark/wireshark/-/issues/19574
inherit (import sources.pin-wireshark { }) wireshark;
}

View file

@ -1,6 +1,5 @@
{
fetchFromGitHub,
fetchpatch,
stdenvNoCC,
lib,
}:
@ -15,31 +14,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
hash = "sha256-p3wfR28DH6V8BHn9DT10d09Yq3mdbBecWwlR1CdDYUA=";
};
patches =
let
mkPRPatch =
{ number, hash }:
fetchpatch {
name = "ai-blocklist-patch-PR${toString number}";
url = "https://patch-diff.githubusercontent.com/raw/laylavish/uBlockOrigin-HUGE-AI-Blocklist/pull/${toString number}.patch";
inherit hash;
};
in
map mkPRPatch [
{
number = 286;
hash = "sha256-ijkOCtHCmiSUTpVfGIumPijr8xscRDBTtu7XfTMRiXY=";
}
{
number = 300;
hash = "sha256-oso0e1+CM7hmglNZpFgaz51OU2Dhuuo7mXayTbva+vY=";
}
{
number = 324;
hash = "sha256-/FFPFZpIQSPE7XXeFEcmVv8g8wg5JFIgKoYUTthLg5A=";
}
];
# Build takes no time
preferLocalBuild = true;
allowSubstitutes = false;

View file

@ -1,28 +0,0 @@
{
haskellPackages,
haskell,
fetchFromGitHub,
fetchpatch,
}:
let
inherit (haskell.lib.compose) appendPatches justStaticExecutables;
drv = haskellPackages.callCabal2nix "hs-speedscope" (fetchFromGitHub {
owner = "mpickering";
repo = "hs-speedscope";
rev = "c34ac00d35f5db52e14dc5b9ba5b228aa9953398";
hash = "sha256-sVTIPIUophj/sgNp1ox1eWHa19zhsZJGjvQt5hUfYk4=";
}) { };
in
appendPatches [
(fetchpatch {
name = "fix-event-dropping-logic";
url = "https://github.com/mpickering/hs-speedscope/commit/1420a9615dc0cafc3051c87cad8a8c463550fcda.patch";
hash = "sha256-kOaMhXHAxSQRhvxhF0uDSD1Us+ywNJcqnrKDfNaU5hA=";
})
(fetchpatch {
name = "passing-rts-options";
url = "https://github.com/mpickering/hs-speedscope/commit/12ad16062325817242f0b7ebefabb40b9af4aa3e.patch";
hash = "sha256-AcL8t+D2xccKGVCCASXgP8t1K4EfHQmDpn2ZmR2Ppxk=";
})
] (justStaticExecutables drv)

View file

@ -1,40 +0,0 @@
if ! type mullvad >/dev/null; then
echo -n "Mullvad unavailable"
exit 1
fi
MULLVAD_STATUS="$(mullvad status -j)"
function xmobarColor {
fg="$1"
x="$2"
echo -n "<fc=$fg>$x</fc>"
}
case "$(echo "$MULLVAD_STATUS" | jq -r ".state")" in
connected)
function has-feature {
echo "$MULLVAD_STATUS" | jq --exit-status ".details.feature_indicators|contains([\"$1\"])" >/dev/null
}
if has-feature "LockdownMode"; then
xmobarColor "green" "Mullvad On "
else
xmobarColor "orange" "Mullvad On"
fi
COUNTRY="$(echo "$MULLVAD_STATUS" | jq -r '.details.location.country')"
CITY="$(echo "$MULLVAD_STATUS" | jq -r '.details.location.city')"
echo -n " ($COUNTRY,$CITY)"
;;
disconnected)
function is-locked-down {
echo "$MULLVAD_STATUS" | jq --exit-status ".details.locked_down" >/dev/null
}
if is-locked-down "LockdownMode"; then
xmobarColor "red" "Mullvad Off "
else
xmobarColor "orange" "Mullvad Off"
fi
;;
esac

View file

@ -1,14 +0,0 @@
{
writeShellApplication,
jq,
mullvad,
}:
writeShellApplication {
name = "mullvad-status";
runtimeInputs = [
mullvad
jq
];
text = builtins.readFile ./mullvad-status.sh;
}

View file

@ -13,8 +13,8 @@ let
domain = "git.confusedcompiler.org";
owner = "leana8959";
repo = "ruler";
rev = "0e08e66f48e6ba5483a7a39456a753581587151f";
hash = "sha256-ay8V35FuXF5eFvWjH87PDzMSQTRALHDRBiZNdOC3gFg=";
rev = "addc8a75dcfd64d5f40516f2526210c8fc163e70";
hash = "sha256-6dnZgkeG0p2O4ROtrFoG+jUmAQPWKHodKzUdVrBgcIM=";
}) { };
cabalOverrides = o: {

View file

@ -2,7 +2,6 @@
writeShellApplication,
tmux,
procps,
fd,
fzf,
gnused,
lib,
@ -43,7 +42,6 @@ let
tmux-sessionizer = writeShellApplication {
name = "tmux-sessionizer";
runtimeInputs = [
fd
fzf
gnused
];

View file

@ -0,0 +1,39 @@
{
lib,
stdenv,
fetchFromGitHub,
rustPlatform,
libiconv,
darwin,
zlib,
}:
rustPlatform.buildRustPackage (
finalAttrs:
let
cargoToml = fromTOML (builtins.readFile (finalAttrs.src + "/Cargo.toml"));
cargoLock = finalAttrs.src + "/Cargo.lock";
in
{
pname = "tokei";
version = cargoToml.package.version;
src = fetchFromGitHub {
owner = "XAMPPRocky";
repo = "tokei";
rev = "v13.0.0-alpha.9";
hash = "sha256-OSIJYSUwc8SvszEOMgt+d/ljCW2jtBkPw6buof4JpUc=";
};
cargoLock.lockFile = cargoLock;
buildInputs = lib.optionals stdenv.isDarwin [
libiconv
darwin.Security
];
checkInputs = lib.optionals stdenv.isDarwin [ zlib ];
# enable all output formats
buildFeatures = [ "all" ];
}
)

View file

@ -7,6 +7,6 @@ in
(import sources.nixpkgs {
overlays = map scopeOverlay [
(import ./overlay.nix)
(import ../overlays/iosevka)
(import ../overlays/iosevka.nix)
];
}).export

View file

@ -9,15 +9,8 @@
*/
# Generated by npins. Do not modify; will be overwritten regularly
let
# Backwards-compatibly make something that previously didn't take any arguments take some
# The function must return an attrset, and will unfortunately be eagerly evaluated
# Same thing, but it catches eval errors on the default argument so that one may still call it with other arguments
mkFunctor =
fn:
let
e = builtins.tryEval (fn { });
in
(if e.success then e.value else { error = fn { }; }) // { __functor = _self: fn; };
data = builtins.fromJSON (builtins.readFile ./sources.json);
version = data.version;
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
range =
@ -28,6 +21,7 @@ let
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
concatMapStrings = f: list: concatStrings (map f list);
concatStrings = builtins.concatStringsSep "";
# If the environment variable NPINS_OVERRIDE_${name} is set, then use
@ -54,61 +48,19 @@ let
mkSource =
name: spec:
{
pkgs ? null,
}:
assert spec ? type;
let
# Unify across builtin and pkgs fetchers.
# `fetchGit` requires a wrapper because of slight API differences.
fetchers =
if pkgs == null then
{
inherit (builtins) fetchTarball fetchurl;
# For some fucking reason, fetchGit has a different signature than the other builtin fetchers …
fetchGit = args: (builtins.fetchGit args).outPath;
}
else
{
fetchTarball =
{
url,
sha256,
}:
pkgs.fetchzip {
inherit url sha256;
extension = "tar";
};
inherit (pkgs) fetchurl;
fetchGit =
{
url,
submodules,
rev,
name,
narHash,
}:
pkgs.fetchgit {
inherit url rev name;
fetchSubmodules = submodules;
hash = narHash;
};
};
# Dispatch to the correct code path based on the type
path =
if spec.type == "Git" then
mkGitSource fetchers spec
mkGitSource spec
else if spec.type == "GitRelease" then
mkGitSource fetchers spec
mkGitSource spec
else if spec.type == "PyPi" then
mkPyPiSource fetchers spec
mkPyPiSource spec
else if spec.type == "Channel" then
mkChannelSource fetchers spec
mkChannelSource spec
else if spec.type == "Tarball" then
mkTarballSource fetchers spec
else if spec.type == "Container" then
mkContainerSource pkgs spec
mkTarballSource spec
else
builtins.throw "Unknown source type ${spec.type}";
in
@ -126,26 +78,22 @@ let
};
mkGitSource =
{
fetchTarball,
fetchGit,
...
}:
{
repository,
revision,
url ? null,
submodules,
hash,
branch ? null,
...
}:
assert repository ? type;
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
# In the latter case, there we will always be an url to the tarball
if url != null && !submodules then
fetchTarball {
builtins.fetchTarball {
inherit url;
sha256 = hash;
sha256 = hash; # FIXME: check nix version & use SRI hashes
}
else
let
@ -156,8 +104,6 @@ let
"https://github.com/${repository.owner}/${repository.repo}.git"
else if repository.type == "GitLab" then
"${repository.server}/${repository.repo_path}.git"
else if repository.type == "Forgejo" then
"${repository.server}/${repository.owner}/${repository.repo}.git"
else
throw "Unrecognized repository type ${repository.type}";
urlToName =
@ -172,91 +118,51 @@ let
"${if matched == null then "source" else builtins.head matched}${appendShort}";
name = urlToName url revision;
in
fetchGit {
builtins.fetchGit {
rev = revision;
narHash = hash;
inherit name submodules url;
inherit name;
# hash = hash;
inherit url submodules;
};
mkPyPiSource =
{ fetchurl, ... }:
{
url,
hash,
...
}:
fetchurl {
builtins.fetchurl {
inherit url;
sha256 = hash;
};
mkChannelSource =
{ fetchTarball, ... }:
{
url,
hash,
...
}:
fetchTarball {
builtins.fetchTarball {
inherit url;
sha256 = hash;
};
mkTarballSource =
{ fetchTarball, ... }:
{
url,
locked_url ? url,
hash,
...
}:
fetchTarball {
builtins.fetchTarball {
url = locked_url;
sha256 = hash;
};
mkContainerSource =
pkgs:
{
image_name,
image_tag,
image_digest,
...
}:
if pkgs == null then
builtins.throw "container sources require passing in a Nixpkgs value: https://github.com/andir/npins/blob/master/README.md#using-the-nixpkgs-fetchers"
sources =
if version == 5 then
builtins.mapAttrs mkSource data.pins
else
pkgs.dockerTools.pullImage {
imageName = image_name;
imageDigest = image_digest;
finalImageTag = image_tag;
};
sources = mkFunctor (
{
input ? ./sources.json,
}:
let
data =
if builtins.isPath input then
# while `readFile` will throw an error anyways if the path doesn't exist,
# we still need to check beforehand because *our* error can be caught but not the one from the builtin
# *piegames sighs*
if builtins.pathExists input then
builtins.fromJSON (builtins.readFile input)
else
throw "Input path ${toString input} does not exist"
else if builtins.isAttrs input then
input
else
throw "Unsupported input type ${builtins.typeOf input}, must be a path or an attrset";
version = data.version;
in
if version == 7 then
builtins.mapAttrs (name: spec: mkFunctor (mkSource name spec)) data.pins
else
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
);
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`";
in
sources

View file

@ -14,24 +14,7 @@
"version": "0.15.0",
"revision": "564595d0ad4be7277e07fa63b5a991b3c645655d",
"url": "https://api.github.com/repos/ryantm/agenix/tarball/0.15.0",
"hash": "sha256-ipqShkBmHKC9ft1ZAsA6aeKps32k7+XZSPwfxeHLsAU="
},
"cornelis": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "agda",
"repo": "cornelis"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v2.7.1",
"revision": "40298eed11eb877526b3ab3f648d8a7bff9e2f50",
"url": "https://api.github.com/repos/agda/cornelis/tarball/refs/tags/v2.7.1",
"hash": "sha256-h18AeggnOSSjy0RLJIkWsSID1BJTarOV9F1APKusIrE=",
"frozen": true
"hash": "01dhrghwa7zw93cybvx4gnrskqk97b004nfxgsys0736823956la"
},
"disko": {
"type": "GitRelease",
@ -47,7 +30,37 @@
"version": "v1.11.0",
"revision": "cdf8deded8813edfa6e65544f69fdd3a59fa2bb4",
"url": "https://api.github.com/repos/nix-community/disko/tarball/v1.11.0",
"hash": "sha256-ItkIZyebGvNH2dK9jVGzJHGPtb6BSWLN8Gmef16NeY0="
"hash": "13brimg7z7k9y36n4jc1pssqyw94nd8qvgfjv53z66lv4xkhin92"
},
"dix": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "bloxx12",
"repo": "dix"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v1.3.0",
"revision": "ba315562f8c4a957dc9c058d75a43419e3307f63",
"url": "https://api.github.com/repos/bloxx12/dix/tarball/v1.3.0",
"hash": "00gr8b6i9xis9kmbblvnafjpaa2hk18bs0i3pxisyzibp928bv2z"
},
"eepy": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "cafkafk",
"repo": "eepy"
},
"branch": "main",
"submodules": false,
"revision": "2092e67cf48f62754cdeb45ced1e5670d11fddc3",
"url": "https://github.com/cafkafk/eepy/archive/2092e67cf48f62754cdeb45ced1e5670d11fddc3.tar.gz",
"hash": "0rddwwrkbbgcdava542qg1wb3ca9d6g24l9gp4ghp55f04p55p79",
"frozen": true
},
"fcitx5-table-extra": {
"type": "Git",
@ -60,7 +73,7 @@
"submodules": true,
"revision": "cba16e03fd43b1ee8a15d20e14ecf0fb1c6762fa",
"url": null,
"hash": "sha256-FL0/BcE6yJhbo4AuoDnh547AE1Wx3JJq/sJf8iwby2c=",
"hash": "0ryb3cng4py2zrm95p5ial9w13p7w4ws0bl0lddrij1sq42kzg8l",
"frozen": true
},
"flake-compat": {
@ -75,7 +88,7 @@
"submodules": false,
"revision": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"url": "https://git.lix.systems/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz",
"hash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"hash": "0g4izwn5k7qpavlk3w41a92rhnp4plr928vmrhc75041vzm3vb1l",
"frozen": true
},
"ghostty-dev": {
@ -87,9 +100,9 @@
},
"branch": "main",
"submodules": false,
"revision": "34eaad6fc86e086f469e81769a793be20d1e169b",
"url": "https://github.com/ghostty-org/ghostty/archive/34eaad6fc86e086f469e81769a793be20d1e169b.tar.gz",
"hash": "sha256-628LfxEPA0tiCjh6syMupdrGvVb6twhoJTtUFKDbqBQ="
"revision": "45abfa91905a5dafdddb711dd9402d45947cdfbb",
"url": "https://github.com/ghostty-org/ghostty/archive/45abfa91905a5dafdddb711dd9402d45947cdfbb.tar.gz",
"hash": "1pmfsxd65yva3ij2v20xb5r1hf3mx6lqr593nivnvsi345jnfh1y"
},
"hategroup-dnsbl": {
"type": "Git",
@ -102,7 +115,7 @@
"submodules": false,
"revision": "cc19c050997d5f54014bb20c764b131e003dfb17",
"url": "https://github.com/chigh/hategroup-dnsbl/archive/cc19c050997d5f54014bb20c764b131e003dfb17.tar.gz",
"hash": "sha256-SZBrjIBUw687MdrbOV7WrP5IhAAtKvPL2GqdcICHNvQ=",
"hash": "1x1nhy0717bav35z6aid0224izmcsrg3knys64xszhslh266p429",
"frozen": true
},
"home-manager": {
@ -133,7 +146,7 @@
"version": "v2.4",
"revision": "c7da66119bb3502a59402cd2d1688a3f0a02577a",
"url": "https://codeberg.org/api/v1/repos/amjoseph/infuse.nix/archive/v2.4.tar.gz",
"hash": "sha256-4XPDTUvV8dfuf9GzKg2/r7j7lMELRAwKKFx3ecQObeg="
"hash": "1s3d1v27jxsw5050qi0bq6agpf5gpw6jmcyigzpdgwfm9d6w6wz1"
},
"nil": {
"type": "Git",
@ -146,7 +159,7 @@
"submodules": false,
"revision": "504599f7e555a249d6754698473124018b80d121",
"url": "https://github.com/oxalica/nil/archive/504599f7e555a249d6754698473124018b80d121.tar.gz",
"hash": "sha256-18j8X2Nbe0Wg1+7YrWRlYzmjZ5Wq0NCVwJHJlBIw/dc="
"hash": "1mzx60999jciq2ax1l5ajmks6fb3cmjavn7fsyh4aysvcdgzrj6p"
},
"nix-monitored": {
"type": "Git",
@ -159,7 +172,7 @@
"submodules": false,
"revision": "60f3baa4701d58eab86c2d1d9c3d7e820074d461",
"url": "https://github.com/ners/nix-monitored/archive/60f3baa4701d58eab86c2d1d9c3d7e820074d461.tar.gz",
"hash": "sha256-Z8PknjkmIr/8ZCH+dmc2Pc+UltiOr7/oKg37PXuVvuU=",
"hash": "1rdyjmxkvyqd5blbzbwfv2b99krx6rkpdzi1ckyby8i676gf9hv7",
"frozen": true
},
"nixos-hardware": {
@ -171,9 +184,9 @@
},
"branch": "master",
"submodules": false,
"revision": "9f7ba891ea5fc3ededd7804f1a23fafadbcb26ca",
"url": "https://github.com/NixOS/nixos-hardware/archive/9f7ba891ea5fc3ededd7804f1a23fafadbcb26ca.tar.gz",
"hash": "sha256-3ymIZ8s3+hu7sDl/Y48o6bwMxorfKrmn97KuWiw1vjY="
"revision": "40b1a28dce561bea34858287fbb23052c3ee63fe",
"url": "https://github.com/NixOS/nixos-hardware/archive/40b1a28dce561bea34858287fbb23052c3ee63fe.tar.gz",
"hash": "197v6xxdq5j4w8kil6q21ij9x6ng8z6j72brkwwjim23798c2c4n"
},
"nixpkgs": {
"type": "Git",
@ -188,22 +201,6 @@
"url": "https://github.com/nixos/nixpkgs/archive/9f0c42f8bc7151b8e7e5840fb3bd454ad850d8c5.tar.gz",
"hash": "1h3g9iyfj0xwz7i4ywcxjpp3p9xk7ahp563m0h1i25697sc2lrji"
},
"npins": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "andir",
"repo": "npins"
},
"pre_releases": false,
"version_upper_bound": "0.5",
"release_prefix": null,
"submodules": false,
"version": "0.4.0",
"revision": "52904b878c2db61e062b63beb07784d41f98c765",
"url": "https://api.github.com/repos/andir/npins/tarball/0.4.0",
"hash": "sha256-ksOXi7u4bpHyWNHwkUR62fdwKowPW5GqBS7MA7Apwh4="
},
"nur": {
"type": "Git",
"repository": {
@ -213,9 +210,9 @@
},
"branch": "main",
"submodules": false,
"revision": "bea55329cc806cfe3b826f7baab0503fd6b6892f",
"url": "https://github.com/nix-community/nur/archive/bea55329cc806cfe3b826f7baab0503fd6b6892f.tar.gz",
"hash": "sha256-B8+OiD8kYXtFc4vJc9+d7q8+MOic8VYR0G8wbSHjuSc="
"revision": "68e3e935ba29960813ab1ecf2852a0ecbe8d5946",
"url": "https://github.com/nix-community/nur/archive/68e3e935ba29960813ab1ecf2852a0ecbe8d5946.tar.gz",
"hash": "02pmkhd6ram43qnmirh3z46w1l31rmm16mhkx36jaxhpnzlwgr2i"
},
"pin-emacs28": {
"type": "Git",
@ -228,7 +225,7 @@
"submodules": false,
"revision": "93c121f6888986f9148a33afd39d714f4b2ca98c",
"url": "https://github.com/NixOS/nixpkgs/archive/93c121f6888986f9148a33afd39d714f4b2ca98c.tar.gz",
"hash": "sha256-r+GZkJ5HiC3HIGiGpTfw5MUuAYuPOj+k0YPjPzYlF6U=",
"hash": "198p4lv3zqw3s6j3yflgic0jxig4y0vsb1k8433jv227ks89kqdg",
"frozen": true
},
"pin-florashell": {
@ -242,7 +239,7 @@
"submodules": false,
"revision": "7282cb574e0607e65224d33be8241eae7cfe0979",
"url": "https://github.com/NixOS/nixpkgs/archive/7282cb574e0607e65224d33be8241eae7cfe0979.tar.gz",
"hash": "sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04=",
"hash": "0klkpy7ah033y3cwj51a0l96lwmkqqvwgfv3kid4z9x5g2rqr0l5",
"frozen": true
},
"pin-fourmolu": {
@ -256,7 +253,7 @@
"submodules": false,
"revision": "f6cf0e77542dd938f002652dd54391b973f792de",
"url": "https://github.com/NixOS/nixpkgs/archive/f6cf0e77542dd938f002652dd54391b973f792de.tar.gz",
"hash": "sha256-4bOckWvBVfncvshtd2JdC+W3XYkyS4xmcfX7uAJnE6k=",
"hash": "1a8kcw1biyzmf5k8qjrji5fvgr8bbmi7fvf8pvfgjmf1df8rrcz1",
"frozen": true
},
"pin-isabelle": {
@ -270,7 +267,7 @@
"submodules": false,
"revision": "805a384895c696f802a9bf5bf4720f37385df547",
"url": "https://github.com/NixOS/nixpkgs/archive/805a384895c696f802a9bf5bf4720f37385df547.tar.gz",
"hash": "sha256-F/TKWETwB5RaR8owkPPi+SPJh83AQsm6KrQAlJ8v/uA=",
"hash": "1q7y5ygr805l5axcjhn0rn3wj8zrwbrr0c6a8xd981zh8iccmx0p",
"frozen": true
},
"pin-masna3shell": {
@ -284,7 +281,7 @@
"submodules": false,
"revision": "641d909c4a7538f1539da9240dedb1755c907e40",
"url": "https://github.com/NixOS/nixpkgs/archive/641d909c4a7538f1539da9240dedb1755c907e40.tar.gz",
"hash": "sha256-HfVZCXic9XLBgybP0318ym3cDnGwBs/+H5MgxFVYF4I=",
"hash": "10hpb1aw884k3zzcy1mhf47dqvfagiyx7kr6hg0p5xcwg04mkx8x",
"frozen": true
},
"pin-necro-man-nixpkgs": {
@ -298,7 +295,7 @@
"submodules": false,
"revision": "c58ed2fc0f592ebc280bfba077ea418ce10213d1",
"url": "https://github.com/NixOS/nixpkgs/archive/c58ed2fc0f592ebc280bfba077ea418ce10213d1.tar.gz",
"hash": "sha256-cZTdVSg1Lzyv/j/H333yliE3E8MnIo1ZsclrLtnQsfg=",
"hash": "1y5is3cjwsy9n5cqs8i7qc9kf8cny9yxzirzzspkqbrm51axv53i",
"frozen": true
},
"pin-vim-tw": {
@ -312,7 +309,7 @@
"submodules": false,
"revision": "c93c1b3413bd7e235fc22b469bc0d2feec332cf5",
"url": "https://github.com/NixOS/nixpkgs/archive/c93c1b3413bd7e235fc22b469bc0d2feec332cf5.tar.gz",
"hash": "sha256-BOuI+BWpOvmNcNc+HXMEQmfxfAX4kadqLvWC6+FsuoQ=",
"hash": "115sdkhyp0pm5rmag4gq0myg2rs20irisgnpf26zjfm92pw8isq4",
"frozen": true
},
"pin-wireshark": {
@ -326,7 +323,7 @@
"submodules": false,
"revision": "9d3ae807ebd2981d593cddd0080856873139aa40",
"url": "https://github.com/NixOS/nixpkgs/archive/9d3ae807ebd2981d593cddd0080856873139aa40.tar.gz",
"hash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=",
"hash": "0bjqgsprq9fgl5yh58dk59xmchi4dajq3sf5i447q02dbiasjsil",
"frozen": true
},
"url-eater": {
@ -340,7 +337,7 @@
"submodules": false,
"revision": "d617007eba79f9760db084aefda6c02c80ad7971",
"url": "https://github.com/AgathaSorceress/url-eater/archive/d617007eba79f9760db084aefda6c02c80ad7971.tar.gz",
"hash": "sha256-lS9M7v8w7ruYz/ylom0ZIfK45vkFZQ3X98a/Is8BOTY="
"hash": "0dir077j5gy6yzbhsr85z7kbiwi135ns59gwrycbpvihzzp4qbwm"
},
"wallpapers": {
"type": "Git",
@ -352,9 +349,9 @@
},
"branch": "mistress",
"submodules": false,
"revision": "2ed11d34f02d86795f6d08bb3ec23e341a46a788",
"url": "https://git.confusedcompiler.org/leana8959/wallpapers/archive/2ed11d34f02d86795f6d08bb3ec23e341a46a788.tar.gz",
"hash": "sha256-fE2uKYi3yWV6h6i4ZXifux9vCOnXdYTJ7kWJUISQ3B4="
"revision": "ee12113e53e1b9b80638b6963a5b7075c3b81e93",
"url": "https://git.confusedcompiler.org/leana8959/wallpapers/archive/ee12113e53e1b9b80638b6963a5b7075c3b81e93.tar.gz",
"hash": "1pv17pvc60jkr8y7j8g3q0wmy5qgsjxsq1gv23yb3gf52g4z98sk"
},
"wired-notify": {
"type": "Git",
@ -367,7 +364,7 @@
"submodules": false,
"revision": "491197a6a5ef9c65a85c3eb1531786f32ffff5b3",
"url": "https://github.com/Toqozz/wired-notify/archive/491197a6a5ef9c65a85c3eb1531786f32ffff5b3.tar.gz",
"hash": "sha256-wxkeSF0/3FI0HSBKhZ2mlAAmFviNrZzdhjHqTfWP6h0="
"hash": "07gaizslvsiihvfrrbcdz0b2c04llsfqaji03ls55p1zbm41w6f3"
},
"zen-browser": {
"type": "Git",
@ -378,10 +375,10 @@
},
"branch": "main",
"submodules": false,
"revision": "0fac05e4b604c3304e7710a95572e78350fe9968",
"url": "https://github.com/0xc000022070/zen-browser-flake/archive/0fac05e4b604c3304e7710a95572e78350fe9968.tar.gz",
"hash": "sha256-jejW3u1bkqz0ObXZeiZqLQNwC7+MXb8/KMwf3VPQpRI="
"revision": "350c729b261e6f5529460140a5f0943dd4c5e156",
"url": "https://github.com/0xc000022070/zen-browser-flake/archive/350c729b261e6f5529460140a5f0943dd4c5e156.tar.gz",
"hash": "1fbx200712rdz3b8c4acrz0ib8fd636bvsiyv4m31xqpfqpj3kza"
}
},
"version": 7
"version": 5
}

View file

@ -1,11 +1,8 @@
let
sources = import ./npins;
in
{
sources ? import ./npins,
pkgs ? import sources.nixpkgs {
overlays = map import [
./nix/overlays/disko.nix
./nix/overlays/npins.nix
];
},
withGHC ? false,