201 Commits

Author SHA1 Message Date
fecd66465d remove wappalyzer completely 2024-03-26 12:01:32 -04:00
9b0d363909 fix: mac dock persistent-apps now supported directly 2024-03-26 12:01:13 -04:00
400d45df39 add ssm session manager for aws 2024-03-26 11:21:32 -04:00
634805d36d fix: ocr file not found errors 2024-03-26 11:17:54 -04:00
db051a737e switch restart script to multiline script 2024-03-24 21:52:34 -04:00
cbf0d2680c fix: multiline execstartpost 2024-03-24 19:23:41 -04:00
316439dc9a fix: chmod for ssh keys 2024-03-24 18:51:35 -04:00
edaf95cc1c fix: forgot to add auth to ssh 2024-03-24 18:50:23 -04:00
5f867fa2dd fix: typo 2024-03-24 18:31:28 -04:00
bdaf63da20 try to restart services after waiting for identity file 2024-03-24 18:25:26 -04:00
c12d54314e fix: home-manager won't start with low mem
issue caused by nix-index memory usage
2024-03-24 18:25:18 -04:00
f50bbeba94 increase grub boot delay for switching os 2024-03-24 18:04:43 -04:00
848c8aac5f Host key verification 2024-03-24 17:39:38 -04:00
488b5d61fd switch ssh wait with a script 2024-03-24 15:34:12 -04:00
6b5892eb1d make identity wait a finite amount 2024-03-24 15:15:07 -04:00
c3be92dcaf fix: s3 cp failing in github actions 2024-03-24 15:06:50 -04:00
64bee30b17 fixes to cloudflare dyndns and ssh 2024-03-24 15:04:40 -04:00
568fdc7491 temp: skip wait for identity 2024-03-24 14:55:17 -04:00
8585574100 more aws config changes 2024-03-24 14:39:18 -04:00
6b37ba13c9 tf init with definition in main 2024-03-24 14:36:23 -04:00
efac745bdd add skip account id to the backend init 2024-03-24 14:31:22 -04:00
7e0a0bbbd2 try mixing up secrets 2024-03-24 14:29:51 -04:00
16e228b7b0 fix: formatting for just the specific folder 2024-03-24 14:24:09 -04:00
277c400248 forgot to add access key vars to s3 cmd 2024-03-24 14:22:57 -04:00
2b03dd5198 try updated caddy vendorhash 2024-03-24 14:04:28 -04:00
bdd922d318 fix: boolean input in gh action 2024-03-24 14:00:38 -04:00
6b2dfb4aa9 fix: tf formatting 2024-03-24 13:59:36 -04:00
67ab65fa16 introduce arrow host and deployment 2024-03-24 13:16:20 -04:00
b06ebc7185 update proton-ge 2024-03-23 09:36:03 -04:00
a30b189207 remove unnecessary firefox addons 2024-03-18 22:48:27 -04:00
eb3c1f7a4c Revert "kvm replaces hdmi monitor w displayport"
This reverts commit bbdfeb645e.
2024-03-18 22:48:12 -04:00
c697cd4e38 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/6e9521ff11ed960d865268078dff00d81e859fbf' (2024-02-26)
  → 'gitlab:magnolia1234/bpc-uploads/0ca7c6a857e4e6c3e508228168e8de70e21cee3a' (2024-03-04)
• Updated input 'darwin':
    'github:lnl7/nix-darwin/17c2ca3c7537a2512224242b84e1ea3c08e79b92' (2024-03-03)
  → 'github:lnl7/nix-darwin/550340062c16d7ef8c2cc20a3d2b97bcd3c6b6f6' (2024-03-07)
• Updated input 'disko':
    'github:nix-community/disko/bde7dd352c07d43bd5b8245e6c39074a391fdd46' (2024-03-01)
  → 'github:nix-community/disko/72818e54ec29427f8d9f9cfa6fc859d01ca6dc66' (2024-03-09)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/144a94dc71410d9655e4e73ac4579e9b7405572b' (2024-03-03)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/e9883b75736b2d33787c9326d27d719a644b1c35' (2024-03-10)
• Updated input 'home-manager':
    'github:nix-community/home-manager/2f3367769a93b226c467551315e9e270c3f78b15' (2024-02-29)
  → 'github:nix-community/home-manager/b0b0c3d94345050a7f86d1ebc6c56eea4389d030' (2024-03-09)
• Updated input 'kitty-scrollback-nvim-src':
    'github:mikesmithgh/kitty-scrollback.nvim/93b4286c4e2c9d4a73ccbefb3adbc688d3ed5fe4' (2024-02-21)
  → 'github:mikesmithgh/kitty-scrollback.nvim/c3014974e4cd498a534ff814761ef794ebb85d01' (2024-03-10)
• Updated input 'nextcloud-snappymail':
    'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-03-03)
  → 'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-03-10)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/2c9562e7624fa1b50983fc18d504bf86202bef49' (2024-02-29)
  → 'github:nix-community/nixos-generators/bef32a05496d9480b02be586fa7827748b9e597b' (2024-03-08)
• Updated input 'nixos-generators/nixlib':
    'github:nix-community/nixpkgs.lib/479831ed8b3c9c7b80533999f880c7d0bf6a491b' (2024-02-25)
  → 'github:nix-community/nixpkgs.lib/7873d84a89ae6e4841528ff7f5697ddcb5bdfe6c' (2024-03-03)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/1536926ef5621b09bba54035ae2bb6d806d72ac8' (2024-02-29)
  → 'github:nixos/nixpkgs/9df3e30ce24fd28c7b3e2de0d986769db5d6225d' (2024-03-06)
• Updated input 'nur':
    'github:nix-community/nur/7cf254f2153f2d0cde346c6ea3ff158acf6a6609' (2024-03-03)
  → 'github:nix-community/nur/ff870a7e359c3f34fc1144c6c35f76003d6c17e7' (2024-03-10)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/efafd73efa9bc8c26282aed563ba0f01c7465b06' (2024-03-03)
  → 'github:kyazdani42/nvim-tree.lua/041dbd18f440207ad161503a384e7c82d575db66' (2024-03-09)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/e3e5ff4ebddcbfa8f5798253ebd1f9b449e8ee69' (2024-03-02)
  → 'github:nvim-treesitter/nvim-treesitter/7ff51f53b0efb6228df2e8539b51bb2e737b77f3' (2024-03-09)
• Updated input 'tree-sitter-puppet':
    'github:amaanq/tree-sitter-puppet/3641b9e854ac9c84c7576e71c4c9a357bcfd9550' (2024-02-18)
  → 'github:amaanq/tree-sitter-puppet/5849f9694197a6e822872945b415429c285fdd54' (2024-03-03)
• Updated input 'tree-sitter-python':
    'github:tree-sitter/tree-sitter-python/22d3f87bdafac2782e907330babe4af574f5d0b4' (2024-02-27)
  → 'github:tree-sitter/tree-sitter-python/03e88c170cb23142559a406b6e7621c4af3128f5' (2024-03-06)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/3257ad7f173b0314c8a42fec450fa6556495b97c' (2024-02-29)
  → 'github:nix-community/NixOS-WSL/e0b9e6c8ff35c7a28cb6baa02d85a9737a2ee4e9' (2024-03-09)
2024-03-10 03:44:43 +00:00
661ef8dcbf significantly improved ldapsearch with jq
improve ldapsearch secondary queries
2024-03-08 09:27:33 -05:00
ec09db42e6 use built-in git diff highlight by default 2024-03-06 11:47:57 -05:00
3403924105 add difftastic for more fancy diffs 2024-03-06 11:22:35 -05:00
3d234072f6 add delta for fancy diffs 2024-03-06 11:19:37 -05:00
b39cda6b84 fix: zfs noauto encrypted pool still requesting passphrase on reboot 2024-03-04 13:01:07 +00:00
47be4291a3 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/47c602fb1253ff05b3654da4a6d375978f6a43fd' (2024-02-12)
  → 'gitlab:magnolia1234/bpc-uploads/6e9521ff11ed960d865268078dff00d81e859fbf' (2024-02-26)
• Updated input 'darwin':
    'github:lnl7/nix-darwin/0e6857fa1d632637488666c08e7b02c08e3178f8' (2024-02-18)
  → 'github:lnl7/nix-darwin/17c2ca3c7537a2512224242b84e1ea3c08e79b92' (2024-03-03)
• Updated input 'disko':
    'github:nix-community/disko/d8a4377cd8eec23668ea3fae07efee9d5782cb91' (2024-02-18)
  → 'github:nix-community/disko/bde7dd352c07d43bd5b8245e6c39074a391fdd46' (2024-03-01)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/2ab9b39e98497584ba952cacb8dfadf8492fd28d' (2024-02-18)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/144a94dc71410d9655e4e73ac4579e9b7405572b' (2024-03-03)
• Updated input 'home-manager':
    'github:nix-community/home-manager/3d6791b3897b526c82920a2ab5f61d71985b3cf8' (2024-02-15)
  → 'github:nix-community/home-manager/2f3367769a93b226c467551315e9e270c3f78b15' (2024-02-29)
• Updated input 'kitty-scrollback-nvim-src':
    'github:mikesmithgh/kitty-scrollback.nvim/78dd609368aa20bd6fbd801cce73ea30787ebe21' (2024-02-13)
  → 'github:mikesmithgh/kitty-scrollback.nvim/93b4286c4e2c9d4a73ccbefb3adbc688d3ed5fe4' (2024-02-21)
• Updated input 'nextcloud-snappymail':
    'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-21)
  → 'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-03-03)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/0aa24e93f75370454f0e03747b6836ac2a2c9fca' (2024-02-14)
  → 'github:nix-community/nixos-generators/2c9562e7624fa1b50983fc18d504bf86202bef49' (2024-02-29)
• Updated input 'nixos-generators/nixlib':
    'github:nix-community/nixpkgs.lib/f5af57d3ef9947a70ac86e42695231ac1ad00c25' (2023-09-03)
  → 'github:nix-community/nixpkgs.lib/479831ed8b3c9c7b80533999f880c7d0bf6a491b' (2024-02-25)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/5863c27340ba4de8f83e7e3c023b9599c3cb3c80' (2024-02-16)
  → 'github:nixos/nixpkgs/1536926ef5621b09bba54035ae2bb6d806d72ac8' (2024-02-29)
• Updated input 'nur':
    'github:nix-community/nur/c4296c55625e5394c142d5c07c00cddb76d5241b' (2024-02-18)
  → 'github:nix-community/nur/7cf254f2153f2d0cde346c6ea3ff158acf6a6609' (2024-03-03)
• Updated input 'nvim-lint-src':
    'github:mfussenegger/nvim-lint/31be66c27214174a28fc092ffcf4bb3e8f6cfd43' (2024-02-16)
  → 'github:mfussenegger/nvim-lint/e824adb9bc01647f71e55457353a68f0f37f9931' (2024-02-29)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/d35a8d5ec6358ada4b058431b367b32360737466' (2024-02-18)
  → 'github:kyazdani42/nvim-tree.lua/efafd73efa9bc8c26282aed563ba0f01c7465b06' (2024-03-03)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/5e4b657181516e4aaf03ccbb4b21eca3b62b07dc' (2024-02-18)
  → 'github:nvim-treesitter/nvim-treesitter/e3e5ff4ebddcbfa8f5798253ebd1f9b449e8ee69' (2024-03-02)
• Updated input 'tree-sitter-lua':
    'github:MunifTanjim/tree-sitter-lua/9668709211b2e683f27f414454a8b51bf0a6bda1' (2023-09-07)
  → 'github:MunifTanjim/tree-sitter-lua/04c9579dcb917255b2e5f8199df4ae7f587d472f' (2024-02-21)
• Updated input 'tree-sitter-puppet':
    'github:amaanq/tree-sitter-puppet/9ce9a5f7d64528572aaa8d59459ba869e634086b' (2023-07-24)
  → 'github:amaanq/tree-sitter-puppet/3641b9e854ac9c84c7576e71c4c9a357bcfd9550' (2024-02-18)
• Updated input 'tree-sitter-python':
    'github:tree-sitter/tree-sitter-python/deba2badc88afd18e6cbd4341ee3c18c3a9bb4ed' (2024-02-14)
  → 'github:tree-sitter/tree-sitter-python/22d3f87bdafac2782e907330babe4af574f5d0b4' (2024-02-27)
• Updated input 'tree-sitter-vimdoc':
    'github:neovim/tree-sitter-vimdoc/ed8695ad8de39c3f073da130156f00b1148e2891' (2024-01-17)
  → 'github:neovim/tree-sitter-vimdoc/016ad75faa854e4e13bc40c517015183b795eed9' (2024-03-02)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/c8ddba82ca6b791be1acaae4b336ff8e857ec70b' (2024-02-12)
  → 'github:nix-community/NixOS-WSL/3257ad7f173b0314c8a42fec450fa6556495b97c' (2024-02-29)
2024-03-03 03:44:57 +00:00
67f7506636 update size for git repos and kitty scrollback 2024-02-28 16:11:03 -05:00
bbdfeb645e kvm replaces hdmi monitor w displayport 2024-02-28 07:55:18 -05:00
7f60d88f30 automatically use autosquash for rebase 2024-02-28 07:55:03 -05:00
8babcf342b convert nextcloud db from mysql to postgres 2024-02-25 22:31:02 +00:00
a5ec39cd2a map users to generic postgres roles 2024-02-25 21:14:04 +00:00
63434c8309 docs: add new users to thelounge 2024-02-25 19:03:58 +00:00
1a5fe54d06 jujutsu shell integration setting deprecated 2024-02-25 19:01:59 +00:00
b2cfdc1fdf add thelounge irc client 2024-02-25 18:50:00 +00:00
3a4568bc69 add gc for home-manager
move gc options into nixpkgs file
2024-02-19 09:45:00 -05:00
203bb6a13a increase generation cleanup limit
just in case it fails from one upgrade week to the next
2024-02-19 14:28:50 +00:00
4bfd65acb3 fix: new disko format of disks wouldn't boot 2024-02-19 14:28:13 +00:00
d636de890c try to add firefox as mime html reader 2024-02-18 10:35:01 -05:00
1e9401eef2 update disko config to new format 2024-02-18 09:41:48 -05:00
ea67467cbf fix: alias nvim-base16 is still in vim-plugins
not sure what it means so i had to package it myself
2024-02-18 09:26:23 -05:00
fc6bdeb1ad temp: himalaya notmuch broken but config still works 2024-02-18 09:06:15 -05:00
2758637953 fix typo in readme 2024-02-16 22:47:32 -05:00
f747c80c2a update proton-ge and improve install to steam 2024-02-16 22:26:17 -05:00
013f67c0a8 partially fill out vars for git 2024-02-16 20:56:28 -05:00
fb145e5772 monochrome polybar icons 2024-02-16 20:56:03 -05:00
408b329684 temp: disable jj fish integration 2024-02-13 09:49:32 -05:00
ad70457600 fix: compress menu bar icons 2024-02-13 09:49:22 -05:00
f54f7b6e2e fix: launching obsidian built by nix on macos 2024-02-13 09:48:56 -05:00
2700efa6e4 increase format timeout in neovim 2024-02-11 22:28:05 -05:00
e44adf4568 rust-analyzer: ignore direnv folder 2024-02-11 16:20:23 -05:00
471b258ff7 update flake.lock 2024-02-11 16:20:06 -05:00
ac6329baf6 patch kitty-scrollback-nvim because health check depends on git 2024-02-10 21:41:19 -05:00
a61ac456a9 fix: neovim refactor adjusted reference for kitty-scrollback 2024-02-10 21:15:28 -05:00
cf77adb366 neovim lsp refactor
remove null-ls (archived, deprecated)
replace formatting with conform.nvim
replace diagnostics with nvim-lint
fixed issue where overlay neovim plugins weren't being applied
2024-02-10 21:04:37 -05:00
2217568a59 clean up commented xdg mime associations 2024-02-10 09:18:37 -05:00
05deb5b979 fix paperless permissions with umask
instead of running a systemd service timer
2024-02-10 01:40:04 +00:00
8621e2375d fix: nextcloud extraOptions renamed 2024-02-10 01:37:21 +00:00
25975da0c1 reenable visidata on mac 2024-02-09 10:33:17 -05:00
a79719c21a fix: atuin search keybind 2024-02-09 09:51:29 -05:00
5aea58df79 clean up hammerspoon on m3 w display
for some reason, i need to multiply x to line up half-max frames
2024-02-08 15:28:46 -05:00
1833bfddfb prefer kitty to not start fullscreen on m3 macbook pro 2024-02-07 23:14:06 -05:00
6c2fc0289b drop apache-directory-studio in favor of ldapsearch
apache directory studio can't figure out how to make it work on m3
2024-02-07 22:08:22 -05:00
5034ada458 add time format to meetingbar and remove scroll zoom
scroll wheel zoom updates don't work for whatever reason
2024-02-07 21:23:01 -05:00
e635cf6225 fix: deprecated option 2024-02-06 23:41:28 -05:00
b901eef822 use nsixv for png images 2024-02-06 22:12:14 -05:00
e7cdfc1453 include non-zero animation in macos window movement 2024-02-06 17:43:44 -05:00
7503335701 add 1password cli everywhere 2024-02-06 17:43:27 -05:00
0b571e4565 partially move macos dock apps to declarative list 2024-02-04 21:09:25 -07:00
f91c9bcfc2 move macos preferences from imperative to declarative 2024-02-04 13:56:16 -07:00
b27b9136f9 remove ansible (no longer used) 2024-02-04 10:03:29 -07:00
865dad0f4f Revert "remove ansible (no longer used)"
This reverts commit 3178a1dea9.
2024-02-04 10:02:50 -07:00
3178a1dea9 remove ansible (no longer used) 2024-02-04 10:02:39 -07:00
af1b6c8b35 add rep and ren (without rep) 2024-02-04 08:33:42 -07:00
89e8463b98 remove unneeded temp fix for terraform on darwin 2024-02-04 08:33:42 -07:00
01eccb6655 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/245899e6b06e30ce36f26b37b8045b6c5b0ac8de' (2024-01-23)
  → 'gitlab:magnolia1234/bpc-uploads/c91cfd510390ab5a138f412ad2890b2cb2a2eafd' (2024-02-02)
• Updated input 'darwin':
    'github:lnl7/nix-darwin/0108864c15bb68ad57d17fb2e7d3a3e025751d79' (2024-01-28)
  → 'github:lnl7/nix-darwin/bdbae6ecff8fcc322bf6b9053c0b984912378af7' (2024-02-02)
• Updated input 'disko':
    'github:nix-community/disko/f7424625dc1f2e4eceac3009cbd1203d566feebc' (2024-01-26)
  → 'github:nix-community/disko/f67ba6552845ea5d7f596a24d57c33a8a9dc8de9' (2024-01-29)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/912228b33c72703badb20a309518e1e09af302c3' (2024-01-28)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/d839feb516758ad28bc1cef43008d55e749c1d6a' (2024-02-04)
• Updated input 'hmts-nvim-src':
    'github:calops/hmts.nvim/14fd941d7ec2bb98314a1aacaa2573d97f1629ab' (2023-08-28)
  → 'github:calops/hmts.nvim/ba1239972a1f56b94252d4f85a43e777ac419662' (2024-02-02)
• Updated input 'home-manager':
    'github:nix-community/home-manager/b2f56952074cb46e93902ecaabfb04dd93733434' (2024-01-26)
  → 'github:nix-community/home-manager/1ca210648a6ca9b957efde5da957f3de6b1f0c45' (2024-02-03)
• Updated input 'kitty-scrollback-nvim-src':
    'github:mikesmithgh/kitty-scrollback.nvim/bb5332b8ec0763b9e611f8cabf4165ed8c3893f5' (2024-01-29)
  → 'github:mikesmithgh/kitty-scrollback.nvim/12f7687ac049d46a987c39b2b4f657fdf540fa4e' (2024-02-02)
• Updated input 'nextcloud-snappymail':
    'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-28)
  → 'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-02-04)
• Updated input 'nix2vim':
    'github:gytis-ivaskevicius/nix2vim/84584da274869fb8177e8ef2d0b9d975bbb82489' (2024-01-28)
  → 'github:gytis-ivaskevicius/nix2vim/29253dcf0f645a44847006d436b096369ef42fd8' (2024-02-02)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/ae5c332cbb5827f6b1f02572496b141021de335f' (2024-01-25)
  → 'github:nixos/nixpkgs/b8b232ae7b8b144397fdb12d20f592e5e7c1a64d' (2024-01-31)
• Updated input 'nur':
    'github:nix-community/nur/ab8cf147ee2254ef91e87ff7272524975fcbba3f' (2024-01-28)
  → 'github:nix-community/nur/ab432acea15134873882610c0e936a882319bc8a' (2024-02-04)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/7bdb220d0fe604a77361e92cdbc7af1b8a412126' (2024-01-21)
  → 'github:kyazdani42/nvim-tree.lua/f39f7b6fcd3865ac2146de4cb4045286308f2935' (2024-01-29)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/458ce4d16c1771fc601ec10a87820acae9981f6d' (2024-01-27)
  → 'github:nvim-treesitter/nvim-treesitter/4fbf150a1621d52f17b099506e1a32f107079210' (2024-02-03)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/31346e340e828f79be23d9c83ec1674b152f17bc' (2024-01-24)
  → 'github:nix-community/NixOS-WSL/bcae8dc73b931b7f0fc65f1f1ef93dc379dfd66b' (2024-02-02)
2024-02-04 03:44:18 +00:00
e7f8a75df3 fix k9s to work with new config workflow 2024-01-30 10:37:05 -07:00
fa03e51d37 add meetingbar cmd opt ctrl j shortcut 2024-01-30 10:22:08 -07:00
fe1a4c2c29 switch to kitty-scrollback.nvim
still has problems with ergonomics
2024-01-30 09:57:38 -07:00
26afa49879 bump neovim plugins and remove unnecessary overlays
clean checkhealth but some possible bugs in bufferline
2024-01-27 21:46:40 -07:00
94bc6662ed fix pr body template for flake updates 2024-01-27 21:20:01 -07:00
06c1f5c372 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/55af5ff1f6a7f8ea7fc57253029c07de8f481c62' (2024-01-18)
  → 'gitlab:magnolia1234/bpc-uploads/245899e6b06e30ce36f26b37b8045b6c5b0ac8de' (2024-01-23)
• Updated input 'darwin':
    'github:lnl7/nix-darwin/3ac7acd32db4f7111015e8d5349ff6067df01bf6' (2024-01-21)
  → 'github:lnl7/nix-darwin/0108864c15bb68ad57d17fb2e7d3a3e025751d79' (2024-01-28)
• Updated input 'disko':
    'github:nix-community/disko/0033adc6e3f1ed076f3ed1c637ef1dfe6bef6733' (2024-01-18)
  → 'github:nix-community/disko/f7424625dc1f2e4eceac3009cbd1203d566feebc' (2024-01-26)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/51cc53fd6e6a1625a00565f110edc09f9ea7cfd9' (2024-01-21)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/912228b33c72703badb20a309518e1e09af302c3' (2024-01-28)
• Updated input 'home-manager':
    'github:nix-community/home-manager/9b378afae72cb07471e19aefc30e8e05ef2d7a61' (2024-01-20)
  → 'github:nix-community/home-manager/b2f56952074cb46e93902ecaabfb04dd93733434' (2024-01-26)
• Updated input 'nextcloud-snappymail':
    'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-21)
  → 'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-28)
• Updated input 'nix2vim':
    'github:gytis-ivaskevicius/nix2vim/3836a348503ae27340c7f83f0bc7bcb907f3781d' (2023-06-05)
  → 'github:gytis-ivaskevicius/nix2vim/84584da274869fb8177e8ef2d0b9d975bbb82489' (2024-01-28)
• Updated input 'nix2vim/flake-utils':
    'github:numtide/flake-utils/a1720a10a6cfe8234c0e93907ffe81be440f4cef' (2023-05-31)
  → 'github:numtide/flake-utils/1ef2e671c3b0c19053962c07dbda38332dcebf26' (2024-01-15)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/521fb4cdd8a2e1a00d1adf0fea7135d1faf04234' (2024-01-16)
  → 'github:nix-community/nixos-generators/896f6589db5b25023b812bbb6c1f5d3a499b1132' (2024-01-24)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/bbe7d8f876fbbe7c959c90ba2ae2852220573261' (2024-01-19)
  → 'github:nixos/nixpkgs/ae5c332cbb5827f6b1f02572496b141021de335f' (2024-01-25)
• Updated input 'nur':
    'github:nix-community/nur/ff6497ef576a1d88ef7ecb7e40e3a7cd9a410b2b' (2024-01-21)
  → 'github:nix-community/nur/ab8cf147ee2254ef91e87ff7272524975fcbba3f' (2024-01-28)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/74525ac04760bf0d9fec2bf51474d2b05f36048e' (2024-01-20)
  → 'github:kyazdani42/nvim-tree.lua/7bdb220d0fe604a77361e92cdbc7af1b8a412126' (2024-01-21)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/5cc562748729b6dc9563ea5a3d676ff102ab38b1' (2024-01-20)
  → 'github:nvim-treesitter/nvim-treesitter/458ce4d16c1771fc601ec10a87820acae9981f6d' (2024-01-27)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/bb3eeeb96ce059ae29309138874ccf58e796f4b1' (2024-01-15)
  → 'github:nix-community/NixOS-WSL/31346e340e828f79be23d9c83ec1674b152f17bc' (2024-01-24)
• Updated input 'wsl/flake-utils':
    'github:numtide/flake-utils/4022d587cbbfd70fe950c1e2083a02621806a725' (2023-12-04)
  → 'github:numtide/flake-utils/1ef2e671c3b0c19053962c07dbda38332dcebf26' (2024-01-15)
• Updated input 'zenyd-mpv-scripts':
    'github:zenyd/mpv-scripts/3ad7502fe2d6575b395db5568afdf830872c85d0' (2024-01-19)
  → 'github:zenyd/mpv-scripts/7100d19d18d111ce77fc9e6e8947c0d542a86397' (2024-01-26)
2024-01-28 04:16:16 +00:00
4dd94ee59d switch nixpath back to strings because of nixos
only works as list of attrsets in darwin
2024-01-27 21:06:23 -07:00
69dd348c92 fix: repos function fzf window too small 2024-01-25 14:57:29 -05:00
d823b2a49e fix: homebrew programs not in path 2024-01-25 14:57:18 -05:00
756177826c add code for macos meetingbar settings 2024-01-25 08:35:19 -05:00
c60632a37f tweaks for new mac 2024-01-25 07:55:31 -05:00
324956c091 fixes for onboarding aarch64-darwin 2024-01-24 21:52:33 -05:00
68c5816d4d fixes for testing on brand new darwin system 2024-01-24 14:41:24 -05:00
643b722eb4 get system ready for m3 macbook 2024-01-24 11:02:06 -05:00
db0b2b147c comment for firefox-addon repository 2024-01-23 07:44:18 -05:00
b382bc9fbb add gpg for darwin machine
just for specific usecases where it's been annoying to pull every time
2024-01-22 16:34:37 -05:00
454accd742 fix proximity sort by using full path 2024-01-22 13:03:46 -05:00
088de57cab add atuin to darwin 2024-01-21 14:28:13 -05:00
5a992d6d5a setup atuin synced shell history for user and root 2024-01-21 09:42:46 -05:00
f44cf65c43 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/fc34b6b8e2d79af62ef9cf8222daeb0eb4b785a4' (2024-01-10)
  → 'gitlab:magnolia1234/bpc-uploads/55af5ff1f6a7f8ea7fc57253029c07de8f481c62' (2024-01-18)
• Updated input 'darwin':
    'github:lnl7/nix-darwin/0dd382b70c351f528561f71a0a7df82c9d2be9a4' (2024-01-03)
  → 'github:lnl7/nix-darwin/3ac7acd32db4f7111015e8d5349ff6067df01bf6' (2024-01-21)
• Updated input 'disko':
    'github:nix-community/disko/f78b6498f69e04514cb84393e5daba669198c1c1' (2024-01-12)
  → 'github:nix-community/disko/0033adc6e3f1ed076f3ed1c637ef1dfe6bef6733' (2024-01-18)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/0d1ff8fb805bfaecfd9a05f788fcd08ca8af38e8' (2024-01-14)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/51cc53fd6e6a1625a00565f110edc09f9ea7cfd9' (2024-01-21)
• Updated input 'home-manager':
    'github:nix-community/home-manager/f2942f3385f1b35cc8a1abb03a45e29c9cb4d3c8' (2024-01-13)
  → 'github:nix-community/home-manager/9b378afae72cb07471e19aefc30e8e05ef2d7a61' (2024-01-20)
• Updated input 'nextcloud-snappymail':
    'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-21)
  → 'https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz?narHash=sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo%3D' (2024-01-21)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/246219bc21b943c6f6812bb7744218ba0df08600' (2023-12-04)
  → 'github:nix-community/nixos-generators/521fb4cdd8a2e1a00d1adf0fea7135d1faf04234' (2024-01-16)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/317484b1ead87b9c1b8ac5261a8d2dd748a0492d' (2024-01-08)
  → 'github:nixos/nixpkgs/bbe7d8f876fbbe7c959c90ba2ae2852220573261' (2024-01-19)
• Updated input 'nur':
    'github:nix-community/nur/7a24ce86be38634afc3c82caccefc2059bdf935b' (2024-01-14)
  → 'github:nix-community/nur/ff6497ef576a1d88ef7ecb7e40e3a7cd9a410b2b' (2024-01-21)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/f24afa2cef551122b8bd53bb2e4a7df42343ce2e' (2024-01-14)
  → 'github:kyazdani42/nvim-tree.lua/74525ac04760bf0d9fec2bf51474d2b05f36048e' (2024-01-20)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/8cd2b230174efbf7b5d9f49fe2f90bda6b5eb16e' (2024-01-07)
  → 'github:nvim-treesitter/nvim-treesitter/5cc562748729b6dc9563ea5a3d676ff102ab38b1' (2024-01-20)
• Updated input 'tree-sitter-bash':
    'github:tree-sitter/tree-sitter-bash/7331995b19b8f8aba2d5e26deb51d2195c18bc94' (2023-10-10)
  → 'github:tree-sitter/tree-sitter-bash/f7239f638d3dc16762563a9027faeee518ce1bd9' (2024-01-19)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/0fa9268bf9a903498cb567e6d4d01eb945f36f6e' (2024-01-11)
  → 'github:nix-community/NixOS-WSL/bb3eeeb96ce059ae29309138874ccf58e796f4b1' (2024-01-15)
• Updated input 'zenyd-mpv-scripts':
    'github:zenyd/mpv-scripts/19ea069abcb794d1bf8fac2f59b50d71ab992130' (2022-04-22)
  → 'github:zenyd/mpv-scripts/3ad7502fe2d6575b395db5568afdf830872c85d0' (2024-01-19)
2024-01-21 03:49:33 +00:00
46f3a459b6 enable paperless permissions cleanup for nextcloud
and other systems
2024-01-21 03:19:19 +00:00
161c1f46b0 update paperless group permissions 2024-01-21 02:13:13 +00:00
fc2484227a add snappymail to nextcloud 2024-01-21 02:13:13 +00:00
e7bbf68dde add logitune for macos even though it doesn't seem to install 2024-01-19 15:11:15 -05:00
10f7b97b64 add pgcli for better interactivity and set pg version 2024-01-19 03:43:10 +00:00
c8a8b7a897 add postgres to swan 2024-01-17 00:58:05 +00:00
6560d2f9a2 update documentation for nixos hosts 2024-01-16 16:30:41 -05:00
3be397429a fix: module renamed extraConfig to settings 2024-01-15 17:49:31 +00:00
8b17fd035b improve aerc search to use all fields by default 2024-01-15 10:28:08 -05:00
8da8fe7efb tweak readme 2024-01-14 23:05:06 -05:00
59111f5da6 remove snippets from neovim
i never used them anyway
2024-01-14 22:33:50 -05:00
95e8d5c268 switch to proximity fzf project switcher
also sadly must remove the shortcut names because sorting requires full paths
2024-01-14 22:33:29 -05:00
56d2c95c64 flake.lock: Update
Flake lock file updates:

• Updated input 'bypass-paywalls-clean':
    'gitlab:magnolia1234/bpc-uploads/dcd11128c6b7c6246fc6d199ce10d5ec796d4716' (2024-01-03)
  → 'gitlab:magnolia1234/bpc-uploads/fc34b6b8e2d79af62ef9cf8222daeb0eb4b785a4' (2024-01-10)
• Updated input 'disko':
    'github:nix-community/disko/aef9a509db64a081186af2dc185654d78dc8e344' (2024-01-03)
  → 'github:nix-community/disko/f78b6498f69e04514cb84393e5daba669198c1c1' (2024-01-12)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/89d4e4ae6eb41838020dbe0a13cc72506402e0e3' (2024-01-07)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/0d1ff8fb805bfaecfd9a05f788fcd08ca8af38e8' (2024-01-14)
• Updated input 'home-manager':
    'github:nix-community/home-manager/51e44a13acea71b36245e8bd8c7db53e0a3e61ee' (2024-01-05)
  → 'github:nix-community/home-manager/f2942f3385f1b35cc8a1abb03a45e29c9cb4d3c8' (2024-01-13)
• Updated input 'nil/flake-utils':
    'github:numtide/flake-utils/4022d587cbbfd70fe950c1e2083a02621806a725' (2023-12-04)
  → 'github:numtide/flake-utils/dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7' (2023-06-25)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/bd645e8668ec6612439a9ee7e71f7eac4099d4f6' (2024-01-02)
  → 'github:nixos/nixpkgs/317484b1ead87b9c1b8ac5261a8d2dd748a0492d' (2024-01-08)
• Updated input 'nur':
    'github:nix-community/nur/3a216c262c910b70e23ee01a4479dcc40c58599b' (2024-01-07)
  → 'github:nix-community/nur/7a24ce86be38634afc3c82caccefc2059bdf935b' (2024-01-14)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/78a5836092617205a999aefc75be1d842c299cbc' (2024-01-06)
  → 'github:kyazdani42/nvim-tree.lua/f24afa2cef551122b8bd53bb2e4a7df42343ce2e' (2024-01-14)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/5032f9952ad2a3a7f7792ac438c4f9e2bd53e0b9' (2024-01-06)
  → 'github:nvim-treesitter/nvim-treesitter/8cd2b230174efbf7b5d9f49fe2f90bda6b5eb16e' (2024-01-07)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/d2fd320bab0aa486383bbf5f13d5d8120700f911' (2024-01-05)
  → 'github:nix-community/NixOS-WSL/0fa9268bf9a903498cb567e6d4d01eb945f36f6e' (2024-01-11)
2024-01-14 03:44:12 +00:00
602d411bad fix: python flake template 2024-01-13 22:07:27 -05:00
4cd9572993 fix: nextcloud status check says no output buffering 2024-01-13 13:35:50 +00:00
84d7fc9892 fix: aerc on darwin
switch to using xdg so config is saved in home dir
instead of ~/Library/Preferences/aerc/
2024-01-12 12:34:04 -05:00
dab40e081a add more services documentation 2024-01-09 23:11:11 -05:00
984a47d3b1 add links for readme diagram 2024-01-07 19:07:16 -05:00
48cd96858a add diagram to readme 2024-01-07 19:05:13 -05:00
2cce4c572f reenable legendary and heroic games 2024-01-07 18:48:40 -05:00
2f783f2ba3 fix: confirm prompt should return not exit 2024-01-07 17:46:11 -05:00
1ee22e3a9a reduce duplicate flake inputs 2024-01-07 08:51:21 -05:00
450b211e7e flake.lock: Update
Flake lock file updates:

• Updated input 'baleia-nvim-src':
    'github:m00qek/baleia.nvim/00bb4af31c8c3865b735d40ebefa6c3f07b2dd16' (2023-04-18)
  → 'github:m00qek/baleia.nvim/6d9cbdaca3a428bc7296f838fdfce3ad01ee7495' (2024-01-06)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/ca04361b1c2e6cbe5cbf7e118a28fe67ddf51f4c' (2024-01-05)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/89d4e4ae6eb41838020dbe0a13cc72506402e0e3' (2024-01-07)
• Updated input 'home-manager':
    'github:nix-community/home-manager/26b8adb300e50efceb51fff6859a1a6ba1ade4f7' (2024-01-04)
  → 'github:nix-community/home-manager/51e44a13acea71b36245e8bd8c7db53e0a3e61ee' (2024-01-05)
• Updated input 'nur':
    'github:nix-community/nur/9c4f6b66f05fc6f6285df25e89f825b441ec9705' (2024-01-05)
  → 'github:nix-community/nur/3a216c262c910b70e23ee01a4479dcc40c58599b' (2024-01-07)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/f1b3e6a7eb92da492bd693257367d9256839ed3d' (2024-01-01)
  → 'github:kyazdani42/nvim-tree.lua/78a5836092617205a999aefc75be1d842c299cbc' (2024-01-06)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/49f1b9a7efc794be143f7ddcd60ce18e8164a7f8' (2024-01-05)
  → 'github:nvim-treesitter/nvim-treesitter/5032f9952ad2a3a7f7792ac438c4f9e2bd53e0b9' (2024-01-06)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/c81bc3f9baa0571d03d1297faddf3a08737fe49e' (2024-01-03)
  → 'github:nix-community/NixOS-WSL/d2fd320bab0aa486383bbf5f13d5d8120700f911' (2024-01-05)
2024-01-07 03:50:00 +00:00
19f3147f25 inline rofi power prompt
hope to fix issue where confirmation doesn't run when linked to another file
2024-01-06 20:51:18 -05:00
5d6d6fc68e fix: second monitor brightness not working
https://github.com/rockowitz/ddcutil/issues/323
2024-01-06 20:21:43 -05:00
ec55658fd1 update to latest proton-ge 2024-01-05 23:36:58 -05:00
d25b189952 switch keybase to home-manager
fixing issues with keybase running in the background and keybase gui
2024-01-05 23:31:53 -05:00
a8b07cc365 update lockfile 2024-01-05 17:01:50 -05:00
70a30ac056 add more common json utilities 2024-01-05 09:09:31 -05:00
cfe1f1d1e2 fix: nextcloud apps routing 404s
due to: bae5e65162
2024-01-05 04:35:04 +00:00
3396918793 try to update nextcloud
issue with extensions not working persists
2024-01-04 03:49:36 +00:00
3ef842f359 fix issue with jellyfin dir permissions 2024-01-04 03:49:09 +00:00
e87cb5981c update caddy dependency hash 2024-01-04 03:48:51 +00:00
6e9419ed92 fix: .fdignore file not working 2024-01-03 14:28:50 -05:00
ab4e516ba8 fix: build terraform on darwin w broken tests 2024-01-02 16:35:09 -05:00
5d2d26b3d9 update firefox addons, add back bpc 2024-01-01 20:50:48 -05:00
50e16f9413 update readme with unique configs 2024-01-01 20:01:17 -05:00
4653037f1e nssmdns option migrated to nssmdns4 2024-01-01 19:48:52 -05:00
f192e53e7a remove latex shortcuts
replace with typst perhaps?
2024-01-01 19:48:36 -05:00
b5a9da8011 fix: obsidian still using broken electron 2024-01-01 19:48:08 -05:00
cbbfb8724b update lockfile 2024-01-01 19:47:54 -05:00
0bbfe0b6b5 add mpv to darwin 2023-12-26 17:26:40 -07:00
cc714dd898 replace vault (OSL) with vault-bin (BSL) for newest updates 2023-12-17 10:13:52 -07:00
4964e56298 shortcut for globalprotection connection 2023-12-17 09:36:16 -07:00
fafd56612e create influxdb service 2023-12-17 02:02:17 +00:00
3042a0ac19 add gh-collaborators extension 2023-12-16 17:32:44 -07:00
9d2a423011 add shortcut to delete remote branches 2023-12-16 17:32:14 -07:00
276c2024b4 remove i-dont-care-about-cookies from firefox 2023-12-10 09:43:14 -06:00
81cffd471d flake.lock: Update
Flake lock file updates:

• Updated input 'disko':
    'github:nix-community/disko/3cb78c93e6a02f494aaf6aeb37481c27a2e2ee22' (2023-11-25)
  → 'github:nix-community/disko/1144887c6f4d2dcbb2316a24364ef53e25b0fcfe' (2023-12-06)
• Updated input 'fidget-nvim-src':
    'github:j-hui/fidget.nvim/785efc604f6ffe3c3fdd2ea86262804d48863ee1' (2023-11-28)
  → 'github:j-hui/fidget.nvim/7dc62b9ce32ac0f21cfb510f243644ce28a39299' (2023-12-09)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/ef0f4f0c89d92cf092dfd650fc92d5ad29f03afc' (2023-12-02)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/800c0105a5f408d8d0c616ea8af36906f8c49f3e' (2023-12-09)
• Updated input 'home-manager':
    'github:nix-community/home-manager/4a8545f5e737a6338814a4676dc8e18c7f43fc57' (2023-12-01)
  → 'github:nix-community/home-manager/e6b7303bd149723c57ca23f5a9428482d6b07306' (2023-12-09)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/150f38bd1e09e20987feacb1b0d5991357532fb5' (2023-09-30)
  → 'github:nix-community/nixos-generators/246219bc21b943c6f6812bb7744218ba0df08600' (2023-12-04)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/e92039b55bcd58469325ded85d4f58dd5a4eaf58' (2023-11-29)
  → 'github:nixos/nixpkgs/2c7f3c0fb7c08a0814627611d9d7d45ab6d75335' (2023-12-04)
• Updated input 'nur':
    'github:nix-community/nur/3c73e262aafcf393976124557a26731dd1038a27' (2023-12-03)
  → 'github:nix-community/nur/be7ffe627e0a74da807928cc3e7ce9f594a16c9e' (2023-12-10)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/05f55c1fd6470b31627655c528245794e3cd4b2c' (2023-11-28)
  → 'github:kyazdani42/nvim-tree.lua/0a7c24b675ab75dab8c36f2a326d274ad66b7166' (2023-12-09)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/80a16deb5146a3eb4648effccda1ab9f45e43e76' (2023-12-01)
  → 'github:nvim-treesitter/nvim-treesitter/7958ff9ec7a2baea2842323d0e7ac67a509da4d2' (2023-12-09)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/1a50ab3fe98934d8f109f05528874c9ab324707b' (2023-11-30)
  → 'github:nix-community/NixOS-WSL/5ee4fa3515de7b5609e6d161b800d91328a7a143' (2023-12-04)
• Updated input 'wsl/nixpkgs':
    'github:NixOS/nixpkgs/50aa30a13c4ab5e7ba282da460a3e3d44e9d0eb3' (2023-11-29)
  → 'github:NixOS/nixpkgs/933d7dc155096e7575d207be6fb7792bc9f34f6d' (2023-12-02)
2023-12-10 03:50:10 +00:00
61a808bad4 flake.lock: Update
Flake lock file updates:

• Updated input 'fidget-nvim-src':
    'github:j-hui/fidget.nvim/a1493d94ecb3464ab3ae4d5855765310566dace4' (2023-11-20)
  → 'github:j-hui/fidget.nvim/785efc604f6ffe3c3fdd2ea86262804d48863ee1' (2023-11-28)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/0071aa8b6c3f20455852a901f833ec94ece1f0bd' (2023-11-25)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/ef0f4f0c89d92cf092dfd650fc92d5ad29f03afc' (2023-12-02)
• Updated input 'home-manager':
    'github:nix-community/home-manager/a462e7315deaa8194b0821f726709bb7e51a850c' (2023-11-25)
  → 'github:nix-community/home-manager/4a8545f5e737a6338814a4676dc8e18c7f43fc57' (2023-12-01)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/5a09cb4b393d58f9ed0d9ca1555016a8543c2ac8' (2023-11-24)
  → 'github:nixos/nixpkgs/e92039b55bcd58469325ded85d4f58dd5a4eaf58' (2023-11-29)
• Updated input 'nur':
    'github:nix-community/nur/41baba347708b140c1dde7dc387ae1b16a396448' (2023-11-26)
  → 'github:nix-community/nur/3c73e262aafcf393976124557a26731dd1038a27' (2023-12-03)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/5e4475d8bf7a3646164e01d9b65ef68369b17e3c' (2023-11-25)
  → 'github:kyazdani42/nvim-tree.lua/05f55c1fd6470b31627655c528245794e3cd4b2c' (2023-11-28)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/d8a71826a20dfc9ed3d8a43e28a00611a302b456' (2023-11-25)
  → 'github:nvim-treesitter/nvim-treesitter/80a16deb5146a3eb4648effccda1ab9f45e43e76' (2023-12-01)
• Updated input 'telescope-project-nvim-src':
    'github:nvim-telescope/telescope-project.nvim/5460c6c60d48618c5c746e5b1cad4c3e8262fdae' (2023-11-06)
  → 'github:nvim-telescope/telescope-project.nvim/1aaf16580a614601a7f7077d9639aeb457dc5559' (2023-12-01)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/a9287f7191467138d6203ea44b3a0b9c745cb145' (2023-11-22)
  → 'github:nix-community/NixOS-WSL/1a50ab3fe98934d8f109f05528874c9ab324707b' (2023-11-30)
• Updated input 'wsl/nixpkgs':
    'github:NixOS/nixpkgs/5550a85a087c04ddcace7f892b0bdc9d8bb080c8' (2023-10-21)
  → 'github:NixOS/nixpkgs/50aa30a13c4ab5e7ba282da460a3e3d44e9d0eb3' (2023-11-29)
2023-12-03 03:49:57 +00:00
48045c0fee flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/0f1ad801387445fdda01d080db8ecf169be8e793' (2023-11-11)
  → 'github:lnl7/nix-darwin/4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d' (2023-11-24)
• Updated input 'disko':
    'github:nix-community/disko/89fd5b51f0725f9775ca9999d53a0a3e5d936490' (2023-11-11)
  → 'github:nix-community/disko/3cb78c93e6a02f494aaf6aeb37481c27a2e2ee22' (2023-11-25)
• Updated input 'fidget-nvim-src':
    'github:j-hui/fidget.nvim/36916518b16d80c48f4b3d88765734bf0842493c' (2023-11-13)
  → 'github:j-hui/fidget.nvim/a1493d94ecb3464ab3ae4d5855765310566dace4' (2023-11-20)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/63df8ec2d300da9912ae5b56b74e7aa574b6de0c' (2023-11-11)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/0071aa8b6c3f20455852a901f833ec94ece1f0bd' (2023-11-25)
• Updated input 'home-manager':
    'github:nix-community/home-manager/50e582b9f91e409ffd2e134017445d376659b32e' (2023-11-12)
  → 'github:nix-community/home-manager/a462e7315deaa8194b0821f726709bb7e51a850c' (2023-11-25)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/85f1ba3e51676fa8cc604a3d863d729026a6b8eb' (2023-11-04)
  → 'github:nixos/nixpkgs/5a09cb4b393d58f9ed0d9ca1555016a8543c2ac8' (2023-11-24)
• Updated input 'nur':
    'github:nix-community/nur/ff495b6b6763bcb879b97c105eedc1db23260bab' (2023-11-12)
  → 'github:nix-community/nur/41baba347708b140c1dde7dc387ae1b16a396448' (2023-11-26)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/874ae6e9445a5eb5ba430e5fd10212450a261ad7' (2023-11-12)
  → 'github:kyazdani42/nvim-tree.lua/5e4475d8bf7a3646164e01d9b65ef68369b17e3c' (2023-11-25)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/075a64addc33390028ea124a1046a43497f05cd1' (2023-11-11)
  → 'github:nvim-treesitter/nvim-treesitter/d8a71826a20dfc9ed3d8a43e28a00611a302b456' (2023-11-25)
• Updated input 'tree-sitter-ini':
    'github:justinmk/tree-sitter-ini/7f11a02fb8891482068e0fe419965d7bade81a68' (2023-07-31)
  → 'github:justinmk/tree-sitter-ini/bcb84a2d4bcd6f55b911c42deade75c8f90cb0c5' (2023-11-13)
• Updated input 'tree-sitter-python':
    'github:tree-sitter/tree-sitter-python/82f5c9937fe4300b4bec3ee0e788d642c77aab2c' (2023-10-11)
  → 'github:tree-sitter/tree-sitter-python/4bfdd9033a2225cc95032ce77066b7aeca9e2efc' (2023-11-17)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/0e4c17efebff955471f169fffbb7e8cd62ada498' (2023-11-09)
  → 'github:nix-community/NixOS-WSL/a9287f7191467138d6203ea44b3a0b9c745cb145' (2023-11-22)
2023-11-26 03:50:51 +00:00
ef6964f3b4 introduced and commented out pg and c stuff
mostly just dev experiments for later
2023-11-18 18:27:32 -05:00
7b7f426624 update fidget nvim, improve rust pkgs, updates for nextcloud apps 2023-11-16 21:19:45 -05:00
d1c0472b77 add fidget for neovim lsp status indicator 2023-11-12 17:51:03 -05:00
e6fd6128f4 fix: turn off highlight named colors in neovim 2023-11-12 17:50:50 -05:00
e72be000b0 flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/afe83cbc2e673b1f08d32dd0f70df599678ff1e7' (2023-10-27)
  → 'github:lnl7/nix-darwin/0f1ad801387445fdda01d080db8ecf169be8e793' (2023-11-11)
• Updated input 'disko':
    'github:nix-community/disko/548962c50b8afad7b8c820c1d6e21dc8394d6e65' (2023-11-04)
  → 'github:nix-community/disko/89fd5b51f0725f9775ca9999d53a0a3e5d936490' (2023-11-11)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/9edd9209798cb115ebadfb5424d49b79b257ebea' (2023-11-04)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/63df8ec2d300da9912ae5b56b74e7aa574b6de0c' (2023-11-11)
• Updated input 'home-manager':
    'github:nix-community/home-manager/8765d4e38aa0be53cdeee26f7386173e6c65618d' (2023-11-03)
  → 'github:nix-community/home-manager/50e582b9f91e409ffd2e134017445d376659b32e' (2023-11-12)
• Updated input 'nextcloud-cookbook':
    'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D'
  → 'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D' (2023-03-24)
• Updated input 'nextcloud-external':
    'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D'
  → 'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D' (2023-09-04)
• Updated input 'nextcloud-news':
    'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D'
  → 'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D' (2023-09-28)
• Updated input 'nur':
    'github:nix-community/nur/8d9f20f147c17d62d16025e9769adbd76245591e' (2023-11-05)
  → 'github:nix-community/nur/ff495b6b6763bcb879b97c105eedc1db23260bab' (2023-11-12)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/7e3c0bee7b246ca835d5f7453db6fa19de359bab' (2023-10-30)
  → 'github:kyazdani42/nvim-tree.lua/874ae6e9445a5eb5ba430e5fd10212450a261ad7' (2023-11-12)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/bef2c24e23d0da62a8542b1f08b1ac87ec43e93f' (2023-11-04)
  → 'github:nvim-treesitter/nvim-treesitter/075a64addc33390028ea124a1046a43497f05cd1' (2023-11-11)
• Updated input 'proton-ge':
    'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D'
  → 'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D' (2023-09-24)
• Updated input 'telescope-project-nvim-src':
    'github:nvim-telescope/telescope-project.nvim/7c64b181dd4e72deddcf6f319e3bf1e95b2a2f30' (2023-04-27)
  → 'github:nvim-telescope/telescope-project.nvim/5460c6c60d48618c5c746e5b1cad4c3e8262fdae' (2023-11-06)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/a058cff4b09b3a398d8caa379b4dc96cfedd98c9' (2023-10-25)
  → 'github:nix-community/NixOS-WSL/0e4c17efebff955471f169fffbb7e8cd62ada498' (2023-11-09)
2023-11-12 04:40:44 +00:00
f50ddd48c8 fix: auto check now requires check permission 2023-11-11 23:33:23 -05:00
3a2d5e2da6 fix: auto check now requires check permission 2023-11-11 23:32:54 -05:00
c929bc6440 add rust to mac and remove cargo shortcut from common 2023-11-10 15:21:10 -05:00
09563de935 enable paperless-ngx document management 2023-11-10 03:37:34 +00:00
a5615da7dc fix: firefox selected tab css has changed 2023-11-08 15:32:35 -05:00
6babfae211 fix: age build on x86-64_darwin fails 2023-11-07 09:22:24 -05:00
b471d0fa7a create more optional neovim settings 2023-11-05 20:40:18 -05:00
cf7d1b50f8 add some polybar restart utils with mouse
for when keyd dies or power scripts are failing
2023-11-05 16:52:27 -05:00
ddb5dc39aa calibre-web patch requires update 2023-11-05 21:50:36 +00:00
3fd95643b0 fix: cargo clippy for rust 2023-11-05 08:12:07 -05:00
d128511a21 update lockfile and adjust PR check
disable legendary because of electron issues
2023-11-05 07:52:56 -05:00
5709afd835 improve rust programming with rust-analyzer lsp and gcc 2023-11-04 13:49:23 -04:00
f828c1c200 add rust programming tooling 2023-11-01 22:13:49 -04:00
77708aebd9 fix: sudo alias overridden by kitty shell integration 2023-10-27 19:43:55 -04:00
f9ac9b1063 Revert "flake.lock: Update"
This reverts commit bdd6c603c4.

The last update introduced instability for BIND when resolving,
apparently some broken trust chains in DNSSEC?
2023-10-27 17:52:01 -04:00
bdd6c603c4 flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/8b6ea26d5d2e8359d06278364f41fbc4b903b28a' (2023-10-03)
  → 'github:lnl7/nix-darwin/19f75c2b45fbfc307ecfeb9dadc41a4c1e4fb980' (2023-10-19)
• Updated input 'disko':
    'github:nix-community/disko/325e1f7f2e0eea44c27e5e8a3946c2461ec095f2' (2023-10-16)
  → 'github:nix-community/disko/c24c3a902935321e1dfa1ca587e66f47edf79faf' (2023-10-19)
• Updated input 'home-manager':
    'github:nix-community/home-manager/c5c1ea85181d2bb44e46e8a944a8a3f56ad88f19' (2023-10-19)
  → 'github:nix-community/home-manager/81ab14626273ca38cba947d9a989c9d72b5e7593' (2023-10-21)
• Updated input 'nextcloud-cookbook':
    'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D'
  → 'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D' (2023-03-24)
• Updated input 'nextcloud-external':
    'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D'
  → 'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D' (2023-09-04)
• Updated input 'nextcloud-news':
    'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D'
  → 'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D' (2023-09-28)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/ca012a02bf8327be9e488546faecae5e05d7d749' (2023-10-16)
  → 'github:nixos/nixpkgs/7c9cc5a6e5d38010801741ac830a3f8fd667a7a0' (2023-10-19)
• Updated input 'nur':
    'github:nix-community/nur/9e80a4be10bd21688163db9b3d2c710e185a654e' (2023-10-19)
  → 'github:nix-community/nur/2efab27e9fbc59973a67a22e16b8f0b7d453c6ad' (2023-10-22)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/40b9b887d090d5da89a84689b4ca0304a9649f62' (2023-10-16)
  → 'github:kyazdani42/nvim-tree.lua/83b699533b279af6d207d6c3860d4301556d65b4' (2023-10-21)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/eb3faef3a44641e5875581e901b0a8df8da2bde4' (2023-10-19)
  → 'github:nvim-treesitter/nvim-treesitter/2f15204510000c144b841b775c5db91e39b4f38e' (2023-10-22)
• Updated input 'proton-ge':
    'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D'
  → 'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D' (2023-09-24)
2023-10-22 03:56:00 +00:00
31e607d0ad update lockfile, add fullpage firefox screenshot 2023-10-19 12:14:24 -04:00
b2337d3c39 update lockfile 2023-10-18 00:04:33 +00:00
6428d4fa62 Revert "flake.lock: Update"
This reverts commit db315b31b4.
2023-10-17 23:58:05 +00:00
db315b31b4 flake.lock: Update
Flake lock file updates:

• Updated input 'disko':
    'github:nix-community/disko/cde886a1c97ef2399b4f91409db045785020291f' (2023-10-05)
  → 'github:nix-community/disko/6ad5c9c17cbd5514ce0cc2692dd82dd6d8e5d879' (2023-10-13)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/6c9812285de872caff762633928370fe9f30365d' (2023-10-07)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/972388ef1f081def3398135dea9edbbede8a6435' (2023-10-14)
• Updated input 'home-manager':
    'github:nix-community/home-manager/3c1d8758ac3f55ab96dcaf4d271c39da4b6e836d' (2023-10-08)
  → 'github:nix-community/home-manager/d4a5076ea8c2c063c45e0165f9f75f69ef583e20' (2023-10-14)
• Updated input 'nextcloud-cookbook':
    'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D'
  → 'https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz?narHash=sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI%2BeXDHnNSm1HDbP6M%3D' (2023-03-24)
• Updated input 'nextcloud-external':
    'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D'
  → 'https://github.com/nextcloud-releases/external/releases/download/v5.2.1/external-v5.2.1.tar.gz?narHash=sha256-X7eC8T8wSZGVwCQp6U/WxjMC7aIj39osgHotaUoRNSQ%3D' (2023-09-04)
• Updated input 'nextcloud-news':
    'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D'
  → 'https://github.com/nextcloud/news/releases/download/24.0.0/news.tar.gz?narHash=sha256-cfJkKRNSz15L4E3w1tnEb%2Bt4MrVwVzb8lb6vCOA4cK4%3D' (2023-09-28)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/87828a0e03d1418e848d3dd3f3014a632e4a4f64' (2023-10-06)
  → 'github:nixos/nixpkgs/5e4c2ada4fcd54b99d56d7bd62f384511a7e2593' (2023-10-11)
• Updated input 'nur':
    'github:nix-community/nur/09a721cf6869671ec2258da3c377436e3498eead' (2023-10-08)
  → 'github:nix-community/nur/a7f7dc7099baec26335cb9335e0adfc3d838e098' (2023-10-15)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/53b0bcaadaffb505acff230578b56a86ec1ab38a' (2023-10-08)
  → 'github:kyazdani42/nvim-tree.lua/aaee4cd896b74f85a81bed7eef2db7869960c4d0' (2023-10-15)
• Updated input 'nvim-treesitter-src':
    'github:nvim-treesitter/nvim-treesitter/a102053352bd958d84a3e1be3de0203d2af92984' (2023-10-08)
  → 'github:nvim-treesitter/nvim-treesitter/ad02fbcdfc391017cad462e04e4740d2887cfa2e' (2023-10-14)
• Updated input 'proton-ge':
    'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D'
  → 'https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-16/GE-Proton8-16.tar.gz?narHash=sha256-75A0VCVdYkiMQ1duE9r2%2BDLBJzV02vUozoVLeo/TIWQ%3D' (2023-09-24)
• Updated input 'tree-sitter-bash':
    'github:tree-sitter/tree-sitter-bash/1479a4030f1a399c253aee02097576d4af46f23a' (2023-10-03)
  → 'github:tree-sitter/tree-sitter-bash/7331995b19b8f8aba2d5e26deb51d2195c18bc94' (2023-10-10)
• Updated input 'tree-sitter-python':
    'github:tree-sitter/tree-sitter-python/a901729099257aac932d79c60adb5e8a53fa7e6c' (2023-09-21)
  → 'github:tree-sitter/tree-sitter-python/82f5c9937fe4300b4bec3ee0e788d642c77aab2c' (2023-10-11)
• Updated input 'wsl':
    'github:nix-community/NixOS-WSL/337edef90c8abe35b42e95aecf510a063dad02dd' (2023-10-02)
  → 'github:nix-community/NixOS-WSL/5da7c4fd0ab9693d83cae50de7d9430696f92568' (2023-10-09)
• Updated input 'wsl/flake-compat':
    'github:edolstra/flake-compat/35bb57c0c8d8b62bbfd284272c928ceb64ddbde9' (2023-01-17)
  → 'github:edolstra/flake-compat/0f9255e01c2351cc7d116c072cb317785dd33b33' (2023-10-04)
• Updated input 'wsl/nixpkgs':
    'github:NixOS/nixpkgs/32dcb45f66c0487e92db8303a798ebc548cadedc' (2023-09-30)
  → 'github:NixOS/nixpkgs/5a237aecb57296f67276ac9ab296a41c23981f56' (2023-10-07)
2023-10-15 03:54:49 +00:00
340a64b87a fix: buildVimPluginFrom2Nix deprecated 2023-10-08 11:17:55 -04:00
89b5183f22 update lockfile and fix terraform unfree issues
exclude terraform from nvim package by default
2023-10-08 11:14:50 -04:00
b4c08adea4 temp: disable terminfo on flame due to broken contour in nixpkgs 2023-10-02 03:38:22 +00:00
13972b1d66 update lockfile and fix tree-sitter issues 2023-09-30 10:20:58 -04:00
352f515798 fix: keyd doesn't restart properly on rebuild 2023-09-30 10:20:45 -04:00
d84be966fc auto close pr if check fails 2023-09-30 09:35:37 -04:00
c9aa20c703 initial attempt for declarative proton-ge 2023-09-16 11:15:41 -04:00
771d41254f partial fix to bash and tree-sitter
still not working in opening bash files but works for other files
2023-09-16 10:08:38 -04:00
90092c48ec update lockfile and reclassify steam in i3 2023-09-16 09:31:56 -04:00
159a6efe09 update lockfile, pin age with overlay 2023-09-15 08:46:28 -04:00
0008de7434 update lockfile and replace exa with eza 2023-09-11 23:18:22 -04:00
9826178c0e fix: rofi-calc live results 2023-09-10 17:34:46 -04:00
d2b1d95281 fix: caddy cloudflare build requires newer golang 2023-09-09 23:20:38 +00:00
4c71797818 fix: nextcloudapps now require specifying licenses 2023-09-09 21:27:15 +00:00
dba975fe86 update lockfile and fix nil build 2023-09-09 10:46:00 -04:00
1a9ab975d1 update darwin firefox and add small convenience tweaks 2023-09-06 15:21:59 -04:00
67251a6d8d add epic games store to macos 2023-08-19 10:49:54 -06:00
967175df70 flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/829041cf10c4f6751a53c0a11ca2fd22ff0918d6' (2023-08-05)
  → 'github:lnl7/nix-darwin/426d38710b656b0a31f8eaae6e0002206a3b96d7' (2023-08-10)
• Updated input 'disko':
    'github:nix-community/disko/4015740375676402a2ee6adebc3c30ea625b9a94' (2023-07-30)
  → 'github:nix-community/disko/241c878d4b542fea7c61ed4421e9224af054ff56' (2023-08-11)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/6081c33185dba05da784d9f2a392861af025bf1a' (2023-08-05)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/4011a1903422d241c0619f7c631a15d27643fa30' (2023-08-12)
• Updated input 'hmts-nvim-src':
    'github:calops/hmts.nvim/1d40963804925754672940d07ddb250d19efec2e' (2023-08-05)
  → 'github:calops/hmts.nvim/594dd17c870afb7f6517723c8963f6eb144e3c0d' (2023-08-08)
• Updated input 'home-manager':
    'github:nix-community/home-manager/0a014a729cdd54d9919ff36b714d047909d7a4c8' (2023-08-05)
  → 'github:nix-community/home-manager/406d34d919e9e8b831b531782cf5ef6995188566' (2023-08-12)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/18036c0be90f4e308ae3ebcab0e14aae0336fe42' (2023-08-04)
  → 'github:nixos/nixpkgs/ce5e4a6ef2e59d89a971bc434ca8ca222b9c7f5e' (2023-08-10)
• Updated input 'null-ls-nvim-src':
    'github:jose-elias-alvarez/null-ls.nvim/db09b6c691def0038c456551e4e2772186449f35' (2023-07-06)
  → 'github:jose-elias-alvarez/null-ls.nvim/0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7' (2023-08-12)
• Updated input 'nur':
    'github:nix-community/nur/cf2f5d8ad452795e5aca290c95eedc829d3da7ec' (2023-08-06)
  → 'github:nix-community/nur/fe48fefbf13a75562599c1ab43871eb5c4274e1a' (2023-08-13)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/904f95cd9db31d1800998fa428e78e418a50181d' (2023-08-06)
  → 'github:kyazdani42/nvim-tree.lua/0a54dcb76b02f3a4e2da370c7a3f6f2b7b43ef01' (2023-08-13)
2023-08-13 03:52:18 +00:00
159 changed files with 2785 additions and 1267 deletions

134
.github/workflows/arrow.yml vendored Normal file
View File

@ -0,0 +1,134 @@
name: Arrow
env:
TERRAFORM_DIRECTORY: hosts/arrow
DEPLOY_IDENTITY_BASE64: ${{ secrets.DEPLOY_IDENTITY_BASE64 }}
ARROW_IDENTITY_BASE64: ${{ secrets.ARROW_IDENTITY_BASE64 }}
CLOUDFLARE_R2_ENDPOINT: "${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com"
AWS_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_KEY }}
AWS_DEFAULT_REGION: auto
AWS_ENDPOINT_URL_S3: "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com"
TF_VAR_vultr_api_key: ${{ secrets.VULTR_API_KEY }}
on:
workflow_dispatch:
inputs:
rebuild:
type: boolean
default: false
action:
type: choice
required: true
default: create
options:
- create
- destroy
jobs:
build-deploy:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout Repo Code
uses: actions/checkout@v4
# Enable access to KVM, required to build an image
- name: Enable KVM group perms
if: inputs.rebuild && inputs.action != 'destroy'
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
# Install Nix
- name: Install Nix
if: inputs.rebuild && inputs.action != 'destroy'
uses: cachix/install-nix-action@v17
# Build the image
- name: Build Image
if: inputs.rebuild && inputs.action != 'destroy'
run: nix build .#image.arrow
- name: Upload Image to S3
if: inputs.rebuild && inputs.action != 'destroy'
run: |
aws s3 cp \
result/iso/nixos.iso \
s3://noahmasur-arrow-images/arrow.iso \
--endpoint-url "https://${{ env.CLOUDFLARE_R2_ENDPOINT }}"
# # Copy the image to S3
# - name: Upload Image to Cache
# env:
# NIX_CACHE_PRIVATE_KEY: ${{ secrets.NIX_CACHE_PRIVATE_KEY }}
# run: |
# echo "$NIX_CACHE_PRIVATE_KEY" > cache.key
# nix store sign --key-file cache.key $(readlink result)
# nix copy --to s3://t2-aws-nixos-test $(readlink result)
# rm cache.key
# Installs the Terraform binary and some other accessory functions.
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
# Checks whether Terraform is formatted properly. If this fails, you
# should install the pre-commit hook.
- name: Check Formatting
working-directory: ${{ env.TERRAFORM_DIRECTORY }}
run: |
terraform fmt -no-color -check -diff -recursive
# Connects to remote state backend and download providers.
- name: Terraform Init
working-directory: ${{ env.TERRAFORM_DIRECTORY }}
run: terraform init
# Deploys infrastructure or changes to infrastructure.
- name: Terraform Apply
if: inputs.action == 'create'
working-directory: ${{ env.TERRAFORM_DIRECTORY }}
run: |
terraform apply \
-auto-approve \
-input=false
# Removes infrastructure.
- name: Terraform Destroy
if: inputs.action == 'destroy'
working-directory: ${{ env.TERRAFORM_DIRECTORY }}
run: |
terraform destroy \
-auto-approve \
-input=false
- name: Get Host IP
if: inputs.action == 'create'
id: host
working-directory: ${{ env.TERRAFORM_DIRECTORY }}
run: terraform output -raw host_ip
- name: Wait on SSH
if: inputs.action == 'create'
run: |
for i in $(seq 1 15); do
if $(nc -z -w 3 ${{ steps.host.outputs.stdout }} 22); then
exit 0
fi
sleep 10
done
- name: Write Identity Keys to Files
if: inputs.action == 'create'
run: |
echo "${{ env.DEPLOY_IDENTITY_BASE64 }}" | base64 -d > deploy_ed25519
chmod 0600 deploy_ed25519
echo "${{ env.ARROW_IDENTITY_BASE64 }}" | base64 -d > arrow_ed25519
chmod 0600 arrow_ed25519
- name: Copy Identity File to Host
if: inputs.action == 'create'
run: |
ssh -i deploy_ed25519 -o StrictHostKeyChecking=accept-new noah@${{ steps.host.outputs.stdout }} 'mkdir -pv .ssh'
scp -i deploy_ed25519 arrow_ed25519 noah@${{ steps.host.outputs.stdout }}:~/.ssh/id_ed25519

View File

@ -8,6 +8,7 @@ on:
permissions: permissions:
contents: write contents: write
pull-requests: write pull-requests: write
checks: write
jobs: jobs:
lockfile: lockfile:
@ -30,9 +31,39 @@ jobs:
pr-labels: | # Labels to be set on the PR pr-labels: | # Labels to be set on the PR
dependencies dependencies
automated automated
pr-body: |
Automated changes by the [update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) GitHub Action.
```
{{ env.GIT_COMMIT_MESSAGE }}
```
- name: Check the Flake - name: Check the Flake
id: check
run: nix flake check run: nix flake check
- name: Update Check Status
uses: LouisBrunner/checks-action@v1.6.1
if: always()
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: Update Flake
conclusion: ${{ job.status }}
output: |
{"summary":"${{ steps.check.outputs.stdout }}"}
- name: Enable Pull Request Automerge - name: Enable Pull Request Automerge
run: gh pr merge --rebase --auto ${{ steps.update.outputs.pull-request-number }} if: success()
run: |
gh pr merge \
--rebase \
--auto \
${{ steps.update.outputs.pull-request-number }}
env:
GH_TOKEN: ${{ github.token }}
- name: Close Pull Request If Failed
if: failure()
run: |
gh pr close \
--comment "Auto-closing pull request" \
--delete-branch \
${{ steps.update.outputs.pull-request-number }}
env: env:
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
.DS_Store .DS_Store
*.bak *.bak
*.db *.db
*.qcow2
**/.direnv/** **/.direnv/**
result result
private/** private/**

View File

@ -25,7 +25,7 @@ configuration may be difficult to translate to a non-Nix system.
| Dotfiles | [Home-Manager](https://github.com/nix-community/home-manager) | [Link](./modules/common) | | Dotfiles | [Home-Manager](https://github.com/nix-community/home-manager) | [Link](./modules/common) |
| Terminal | [Kitty](https://sw.kovidgoyal.net/kitty/) | [Link](./modules/common/applications/kitty.nix) | | Terminal | [Kitty](https://sw.kovidgoyal.net/kitty/) | [Link](./modules/common/applications/kitty.nix) |
| Shell | [Fish](https://fishshell.com/) | [Link](./modules/common/shell/fish) | | Shell | [Fish](https://fishshell.com/) | [Link](./modules/common/shell/fish) |
| Shell Prompt | [Starship](https://starship.rs/) | [Link](./modules/common/shell/starhip.nix) | | Shell Prompt | [Starship](https://starship.rs/) | [Link](./modules/common/shell/starship.nix) |
| Colorscheme | [Gruvbox](https://github.com/morhetz/gruvbox) | [Link](./colorscheme/gruvbox/default.nix) | | Colorscheme | [Gruvbox](https://github.com/morhetz/gruvbox) | [Link](./colorscheme/gruvbox/default.nix) |
| Wallpaper | [Road](https://gitlab.com/exorcist365/wallpapers/-/blob/master/gruvbox/road.jpg) | [Link](./hosts/tempest/default.nix) | | Wallpaper | [Road](https://gitlab.com/exorcist365/wallpapers/-/blob/master/gruvbox/road.jpg) | [Link](./hosts/tempest/default.nix) |
| Text Editor | [Neovim](https://neovim.io/) | [Link](./modules/common/neovim/config) | | Text Editor | [Neovim](https://neovim.io/) | [Link](./modules/common/neovim/config) |
@ -41,6 +41,30 @@ configuration may be difficult to translate to a non-Nix system.
| --- | --- | --- | | --- | --- | --- |
| Keybinds | [Hammerspoon](https://www.hammerspoon.org/) | [Link](./modules/darwin/hammerspoon) | | Keybinds | [Hammerspoon](https://www.hammerspoon.org/) | [Link](./modules/darwin/hammerspoon) |
# Diagram
![Diagram](https://github.com/nmasur/dotfiles/assets/7386960/ed3e7202-09c4-4a9c-9b14-0272c01647f6)
- [flake.nix](./flake.nix)
- [hosts](./hosts/)
- [modules](./modules/)
---
# Unique Configurations
This repo contains a few more elaborate elements of configuration.
- [Neovim config](./modules/common/neovim/default.nix) generated with Nix2Vim
and source-controlled plugins, differing based on installed LSPs, for example.
- [Caddy JSON](./modules/nixos/services/caddy.nix) file (routes, etc.) based
dynamically on enabled services rendered with Nix.
- [Grafana config](./modules/nixos/services/grafana.nix) rendered with Nix.
- Custom [secrets deployment](./modules/nixos/services/secrets.nix) similar to
agenix.
- Base16 [colorschemes](./colorscheme/) applied to multiple applications,
including Firefox userChrome.
--- ---
# Installation # Installation

View File

@ -5,6 +5,7 @@
program = builtins.toString (pkgs.writeShellScript "loadkey" '' program = builtins.toString (pkgs.writeShellScript "loadkey" ''
printf "\nEnter the seed phrase for your SSH key...\n" printf "\nEnter the seed phrase for your SSH key...\n"
printf "\nThen press ^D when complete.\n\n" printf "\nThen press ^D when complete.\n\n"
mkdir -p ~/.ssh/
${pkgs.melt}/bin/melt restore ~/.ssh/id_ed25519 ${pkgs.melt}/bin/melt restore ~/.ssh/id_ed25519
printf "\n\nContinuing activation.\n\n" printf "\n\nContinuing activation.\n\n"
''); '');

View File

@ -4,38 +4,34 @@
type = "disk"; type = "disk";
device = disk; device = disk;
content = { content = {
type = "table"; type = "gpt";
format = "gpt"; partitions = {
partitions = [
# Boot partition # Boot partition
{ ESP = rec {
name = "ESP"; size = "512MiB";
start = "0"; type = "EF00";
end = "512MiB"; label = "boot";
fs-type = "fat32"; device = "/dev/disk/by-label/${label}";
bootable = true;
content = { content = {
type = "filesystem"; type = "filesystem";
format = "vfat"; format = "vfat";
mountpoint = "/boot"; mountpoint = "/boot";
extraArgs = [ "-n boot" ]; extraArgs = [ "-n ${label}" ];
}; };
} };
# Root partition ext4 # Root partition ext4
{ root = rec {
name = "root"; size = "100%";
start = "512MiB"; label = "nixos";
end = "100%"; device = "/dev/disk/by-label/${label}";
part-type = "primary";
bootable = true;
content = { content = {
type = "filesystem"; type = "filesystem";
format = "ext4"; format = "ext4";
mountpoint = "/"; mountpoint = "/";
extraArgs = [ "-L nixos" ]; extraArgs = [ "-L ${label}" ];
}; };
} };
]; };
}; };
}; };
}; };

View File

@ -49,19 +49,24 @@ move the `windows/alacritty.yml` file to
To get started on a bare macOS installation, first install Nix: To get started on a bare macOS installation, first install Nix:
```bash ```bash
sh -c "$(curl -L https://nixos.org/nix/install)" curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
``` ```
Then use Nix to build nix-darwin: Launch a new shell. Then use Nix to switch to the macOS configuration:
```bash ```bash
nix-build https://github.com/LnL7/nix-darwin/archive/master.tar.gz -A installer sudo rm /etc/bashrc
./result/bin/darwin-installer sudo rm /etc/nix/nix.conf
nix \
--extra-experimental-features flakes \
--extra-experimental-features nix-command \
run nix-darwin -- switch \
--flake github:nmasur/dotfiles#lookingglass
``` ```
Then switch to the macOS configuration: Once installed, you can continue to update the macOS configuration:
```bash ```bash
darwin-rebuild switch --flake github:nmasur/dotfiles#lookingglass darwin-rebuild switch --flake ~/dev/personal/dotfiles
``` ```

View File

@ -63,3 +63,20 @@ Use this mysqldump command:
sudo -u nextcloud mysqldump -S /run/mysqld/mysqld.sock --default-character-set=utf8mb4 nextcloud > backup.sql sudo -u nextcloud mysqldump -S /run/mysqld/mysqld.sock --default-character-set=utf8mb4 nextcloud > backup.sql
``` ```
## Converting to Postgres
Same as MySQL, but run this command instead:
```
sudo -u nextcloud nextcloud-occ db:convert-type pgsql nextcloud /run/postgresql/ nextcloud
```
Then set the `dbtype` to `pgsql`.
## Backing Up Postgres Database
Use this pg_dump command:
```
sudo -u nextcloud pg_dump nextcloud > backup.sql
```

576
flake.lock generated
View File

@ -1,6 +1,87 @@
{ {
"nodes": { "nodes": {
"Comment-nvim-src": { "baleia-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1704551058,
"narHash": "sha256-0NmiGzMFvL1awYOVtiaSd+O4sAR524x68xwWLgArlqs=",
"owner": "m00qek",
"repo": "baleia.nvim",
"rev": "6d9cbdaca3a428bc7296f838fdfce3ad01ee7495",
"type": "github"
},
"original": {
"owner": "m00qek",
"repo": "baleia.nvim",
"type": "github"
}
},
"base16-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1708139024,
"narHash": "sha256-l0BO2boIy6mwK8ISWS3D68f8egqHYwsGSAnzjbB5aOE=",
"owner": "RRethy",
"repo": "base16-nvim",
"rev": "b3e9ec6a82c05b562cd71f40fe8964438a9ba64a",
"type": "github"
},
"original": {
"owner": "RRethy",
"repo": "base16-nvim",
"type": "github"
}
},
"bufferline-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1706180994,
"narHash": "sha256-/iGzUDJaodkUyWpwim8UtwaRuarfu/Nk6wxVApk+QxY=",
"owner": "akinsho",
"repo": "bufferline.nvim",
"rev": "d6cb9b7cac52887bcac65f8698e67479553c0748",
"type": "github"
},
"original": {
"owner": "akinsho",
"ref": "v4.5.0",
"repo": "bufferline.nvim",
"type": "github"
}
},
"bypass-paywalls-clean": {
"flake": false,
"locked": {
"lastModified": 1709556839,
"narHash": "sha256-LbsaYISpsjCI8DXPu2toBI3uMK+Xau1sWuzA2xsQ6Pg=",
"owner": "magnolia1234",
"repo": "bpc-uploads",
"rev": "0ca7c6a857e4e6c3e508228168e8de70e21cee3a",
"type": "gitlab"
},
"original": {
"owner": "magnolia1234",
"repo": "bpc-uploads",
"type": "gitlab"
}
},
"cmp-nvim-lsp-src": {
"flake": false,
"locked": {
"lastModified": 1702205473,
"narHash": "sha256-/0sh9vJBD9pUuD7q3tNSQ1YLvxFMNykdg5eG+LjZAA8=",
"owner": "hrsh7th",
"repo": "cmp-nvim-lsp",
"rev": "5af77f54de1b16c34b23cba810150689a3a90312",
"type": "github"
},
"original": {
"owner": "hrsh7th",
"repo": "cmp-nvim-lsp",
"type": "github"
}
},
"comment-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1681214440, "lastModified": 1681214440,
@ -17,55 +98,6 @@
"type": "github" "type": "github"
} }
}, },
"baleia-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1681806450,
"narHash": "sha256-jxRlIzWbnSj89032msc5w+2TVt7zVyzlxdXxiH1dQqY=",
"owner": "m00qek",
"repo": "baleia.nvim",
"rev": "00bb4af31c8c3865b735d40ebefa6c3f07b2dd16",
"type": "github"
},
"original": {
"owner": "m00qek",
"repo": "baleia.nvim",
"type": "github"
}
},
"bufferline-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1687763763,
"narHash": "sha256-wbOeylzjjScQXkrDbBU2HtrOZrp2YUK+wQ2aOkgxmRQ=",
"owner": "akinsho",
"repo": "bufferline.nvim",
"rev": "bf2f6b7edd0abf6b0732f5e5c0a8f30e51611c75",
"type": "github"
},
"original": {
"owner": "akinsho",
"ref": "v4.2.0",
"repo": "bufferline.nvim",
"type": "github"
}
},
"cmp-nvim-lsp-src": {
"flake": false,
"locked": {
"lastModified": 1687494203,
"narHash": "sha256-mU0soCz79erJXMMqD/FyrJZ0mu2n6fE0deymPzQlxts=",
"owner": "hrsh7th",
"repo": "cmp-nvim-lsp",
"rev": "44b16d11215dce86f253ce0c30949813c0a90765",
"type": "github"
},
"original": {
"owner": "hrsh7th",
"repo": "cmp-nvim-lsp",
"type": "github"
}
},
"darwin": { "darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -73,11 +105,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1691275315, "lastModified": 1709771483,
"narHash": "sha256-9WN0IA0vNZSNxKHpy/bYvPnCw4VH/nr5iBv7c+7KUts=", "narHash": "sha256-Hjzu9nCknHLQvhdaRFfCEprH0o15KcaNu1QDr3J88DI=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "829041cf10c4f6751a53c0a11ca2fd22ff0918d6", "rev": "550340062c16d7ef8c2cc20a3d2b97bcd3c6b6f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -94,11 +126,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1690739034, "lastModified": 1709967935,
"narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=", "narHash": "sha256-ZLLdGWs9njivxZsfSzfQN05g6WIyIe24bPb61y7FVqo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "4015740375676402a2ee6adebc3c30ea625b9a94", "rev": "72818e54ec29427f8d9f9cfa6fc859d01ca6dc66",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -107,6 +139,23 @@
"type": "github" "type": "github"
} }
}, },
"fidget-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1704696337,
"narHash": "sha256-uAX/RGfOmsUIUaDepNwUpK8MBaTMBJ4rLZ69y0MwpNE=",
"owner": "j-hui",
"repo": "fidget.nvim",
"rev": "3a93300c076109d86c7ce35ec67a8034ae6ba9db",
"type": "github"
},
"original": {
"owner": "j-hui",
"ref": "v1.2.0",
"repo": "fidget.nvim",
"type": "github"
}
},
"firefox-darwin": { "firefox-darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -114,11 +163,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1691196340, "lastModified": 1710031437,
"narHash": "sha256-b1haFWCbFJkiUkeTQCkNjr8hFq/8JlMPaQwNpGlcvxI=", "narHash": "sha256-XauWQSnMUwJOHgW/ByZP1kOrJyNSJxV4aNoBlo8lnoc=",
"owner": "bandithedoge", "owner": "bandithedoge",
"repo": "nixpkgs-firefox-darwin", "repo": "nixpkgs-firefox-darwin",
"rev": "6081c33185dba05da784d9f2a392861af025bf1a", "rev": "e9883b75736b2d33787c9326d27d719a644b1c35",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -130,11 +179,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1696426674,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -144,12 +193,15 @@
} }
}, },
"flake-utils": { "flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": { "locked": {
"lastModified": 1678901627, "lastModified": 1705309234,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -159,33 +211,15 @@
} }
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1685518550,
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1689068808, "lastModified": 1705309234,
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -197,11 +231,11 @@
"hmts-nvim-src": { "hmts-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1691223193, "lastModified": 1706900289,
"narHash": "sha256-Zsl4s3e4upWiU2mXKqiQcUGxslPzzebKKXfzaHiNq48=", "narHash": "sha256-kw3YJ21nhs/x9Jp7kvnL+9FuiSgLB1hO/ON3QeeZx9g=",
"owner": "calops", "owner": "calops",
"repo": "hmts.nvim", "repo": "hmts.nvim",
"rev": "1d40963804925754672940d07ddb250d19efec2e", "rev": "ba1239972a1f56b94252d4f85a43e777ac419662",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -217,11 +251,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1691225770, "lastModified": 1709988192,
"narHash": "sha256-O5slH8nW8msTAqVAS5rkvdHSkjmrO+JauuSDzZCmv2M=", "narHash": "sha256-qxwIkl85P0I1/EyTT+NJwzbXdOv86vgZxcv4UKicjK8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "0a014a729cdd54d9919ff36b714d047909d7a4c8", "rev": "b0b0c3d94345050a7f86d1ebc6c56eea4389d030",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -231,78 +265,87 @@
"type": "github" "type": "github"
} }
}, },
"kitty-scrollback-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1710038457,
"narHash": "sha256-/6uDN3wE6uO4yxj7tNtLXjaMse2DCQsehpTnoEyBA/U=",
"owner": "mikesmithgh",
"repo": "kitty-scrollback.nvim",
"rev": "c3014974e4cd498a534ff814761ef794ebb85d01",
"type": "github"
},
"original": {
"owner": "mikesmithgh",
"repo": "kitty-scrollback.nvim",
"type": "github"
}
},
"nextcloud-cookbook": { "nextcloud-cookbook": {
"flake": false, "flake": false,
"locked": { "locked": {
"narHash": "sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M=", "lastModified": 1702545935,
"narHash": "sha256-19LN1nYJJ0RMWj6DrYPvHzocTyhMfYdpdhBFch3fpHE=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz" "url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.0/cookbook-0.11.0.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz" "url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.0/cookbook-0.11.0.tar.gz"
} }
}, },
"nextcloud-external": { "nextcloud-external": {
"flake": false, "flake": false,
"locked": { "locked": {
"narHash": "sha256-gY1nxqK/pHfoxW/9mE7DFtNawgdEV7a4OXpscWY14yk=", "lastModified": 1699624334,
"narHash": "sha256-RCL2RP5twRDLxI/KfAX6QLYQOzqZmSWsfrC5ZQIwTD4=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz" "url": "https://github.com/nextcloud-releases/external/releases/download/v5.3.1/external-v5.3.1.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz" "url": "https://github.com/nextcloud-releases/external/releases/download/v5.3.1/external-v5.3.1.tar.gz"
} }
}, },
"nextcloud-news": { "nextcloud-news": {
"flake": false, "flake": false,
"locked": { "locked": {
"narHash": "sha256-hhXPEITSbCiFs0o+TOsQnSasXBpjU9mA/OFsbzuaCPw=", "lastModified": 1703426420,
"narHash": "sha256-AENBJH/bEob5JQvw4WEi864mdLYJ5Mqe78HJH6ceCpI=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz" "url": "https://github.com/nextcloud/news/releases/download/25.0.0-alpha3/news.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz" "url": "https://github.com/nextcloud/news/releases/download/25.0.0-alpha3/news.tar.gz"
} }
}, },
"nil": { "nextcloud-snappymail": {
"inputs": { "flake": false,
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": { "locked": {
"lastModified": 1680544266, "lastModified": 1710042081,
"narHash": "sha256-d/TusDXmIo8IT5DNRA21lN+nOVSER8atIx9TJteR6LQ=", "narHash": "sha256-UeZXoZFEPJj7zEVNTXJ3IYNt/wI7VFq3Pjh1ubMHCBo=",
"owner": "oxalica", "type": "tarball",
"repo": "nil", "url": "https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz"
"rev": "56a1fa87b98a9508920f4b0ab8fe36d5b54b2362",
"type": "github"
}, },
"original": { "original": {
"owner": "oxalica", "type": "tarball",
"ref": "2023-04-03", "url": "https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz"
"repo": "nil",
"type": "github"
} }
}, },
"nix2vim": { "nix2vim": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1685980282, "lastModified": 1707832982,
"narHash": "sha256-uQyVaoqkiocA8bXKMfrgizuKmz0hUzHye5owFoUd2AQ=", "narHash": "sha256-Jsrj8HJyo+PmjrHIDhq4gjZCE0eYCVmmTrx24cG8eOQ=",
"owner": "gytis-ivaskevicius", "owner": "gytis-ivaskevicius",
"repo": "nix2vim", "repo": "nix2vim",
"rev": "3836a348503ae27340c7f83f0bc7bcb907f3781d", "rev": "2fb1328cf058fc967b02f9a5330a99253b4c247e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -313,11 +356,11 @@
}, },
"nixlib": { "nixlib": {
"locked": { "locked": {
"lastModified": 1689469483, "lastModified": 1709426687,
"narHash": "sha256-2SBhY7rZQ/iNCxe04Eqxlz9YK9KgbaTMBssq3/BgdWY=", "narHash": "sha256-jLBZmwXf0WYHzLkmEMq33bqhX55YtT5edvluFr0RcSA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "02fea408f27186f139153e1ae88f8ab2abd9c22c", "rev": "7873d84a89ae6e4841528ff7f5697ddcb5bdfe6c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -334,11 +377,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1690133435, "lastModified": 1709887845,
"narHash": "sha256-YNZiefETggroaTLsLJG2M+wpF0pJPwiauKG4q48ddNU=", "narHash": "sha256-803UIoB8+vGkm/VK/g55aBAAOf/ncTGvxXyjTF4ydm0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "b1171de4d362c022130c92d7c8adc4bf2b83d586", "rev": "bef32a05496d9480b02be586fa7827748b9e597b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -349,11 +392,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1691186842, "lastModified": 1709703039,
"narHash": "sha256-wxBVCvZUwq+XS4N4t9NqsHV4E64cPVqQ2fdDISpjcw0=", "narHash": "sha256-6hqgQ8OK6gsMu1VtcGKBxKQInRLHtzulDo9Z5jxHEFY=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "18036c0be90f4e308ae3ebcab0e14aae0336fe42", "rev": "9df3e30ce24fd28c7b3e2de0d986769db5d6225d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -363,45 +406,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": {
"locked": {
"lastModified": 1690470004,
"narHash": "sha256-l57RmPhPz9r1LGDg/0v8bYgJO8R+GGTQZtkIxE7negU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9462344318b376e157c94fa60c20a25b913b2381",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"null-ls-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1688652536,
"narHash": "sha256-6KJtj9pbvBm6fOVpnyzO2fEVC+cVrw2XtZHOgq9ieIw=",
"owner": "jose-elias-alvarez",
"repo": "null-ls.nvim",
"rev": "db09b6c691def0038c456551e4e2772186449f35",
"type": "github"
},
"original": {
"owner": "jose-elias-alvarez",
"repo": "null-ls.nvim",
"type": "github"
}
},
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1691289987, "lastModified": 1710037658,
"narHash": "sha256-sbbDlVzxlP+bBTdhyyzJ6C0APUNU/sChuLmNU9ehkmg=", "narHash": "sha256-6i7th4IX+2E1KX7FEJ4XgYtvQAooLa6YRsUIVRDu0PU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nur", "repo": "nur",
"rev": "cf2f5d8ad452795e5aca290c95eedc829d3da7ec", "rev": "ff870a7e359c3f34fc1144c6c35f76003d6c17e7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -410,19 +421,35 @@
"type": "github" "type": "github"
} }
}, },
"nvim-lint-src": {
"flake": false,
"locked": {
"lastModified": 1709238483,
"narHash": "sha256-fYaiUFNaaSPejKBecKB7ifp/soREWYIh3avemU5qJJE=",
"owner": "mfussenegger",
"repo": "nvim-lint",
"rev": "e824adb9bc01647f71e55457353a68f0f37f9931",
"type": "github"
},
"original": {
"owner": "mfussenegger",
"repo": "nvim-lint",
"type": "github"
}
},
"nvim-lspconfig-src": { "nvim-lspconfig-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1675639052, "lastModified": 1701687137,
"narHash": "sha256-B8IgpypxzCACZ5VcqM6KiWyClaN+KrmemtkwMznmj5Y=", "narHash": "sha256-qFjFofA2LoD4yRfx4KGfSCpR3mDkpFaagcm+TVNPqco=",
"owner": "neovim", "owner": "neovim",
"repo": "nvim-lspconfig", "repo": "nvim-lspconfig",
"rev": "255e07ce2a05627d482d2de77308bba51b90470c", "rev": "cf3dd4a290084a868fac0e2e876039321d57111c",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "neovim", "owner": "neovim",
"ref": "v0.1.6", "ref": "v0.1.7",
"repo": "nvim-lspconfig", "repo": "nvim-lspconfig",
"type": "github" "type": "github"
} }
@ -430,11 +457,11 @@
"nvim-tree-lua-src": { "nvim-tree-lua-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1691292370, "lastModified": 1709951243,
"narHash": "sha256-YQRirmp8QerxwF9qdrSrUKJZiVrBb6ZWpUTfM8H7fl4=", "narHash": "sha256-1lWdTSZt/J4geoQKLkZLQ5Yh992XpZ4cFHw4AGEJFPY=",
"owner": "kyazdani42", "owner": "kyazdani42",
"repo": "nvim-tree.lua", "repo": "nvim-tree.lua",
"rev": "904f95cd9db31d1800998fa428e78e418a50181d", "rev": "041dbd18f440207ad161503a384e7c82d575db66",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -446,82 +473,110 @@
"nvim-treesitter-src": { "nvim-treesitter-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1681121236, "lastModified": 1709968077,
"narHash": "sha256-iPsPDLhVKJ14iP1/2cCgcY9SCKK/DQz9Y0mQB1DqNiM=", "narHash": "sha256-5cHJMqbiBAbkis9exMAH5Y2ALynaSVmQT8NQTR4VztM=",
"owner": "nvim-treesitter", "owner": "nvim-treesitter",
"repo": "nvim-treesitter", "repo": "nvim-treesitter",
"rev": "cc360a9beb1b30d172438f640e2c3450358c4086", "rev": "7ff51f53b0efb6228df2e8539b51bb2e737b77f3",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nvim-treesitter", "owner": "nvim-treesitter",
"ref": "v0.9.0", "ref": "master",
"repo": "nvim-treesitter", "repo": "nvim-treesitter",
"type": "github" "type": "github"
} }
}, },
"proton-ge": {
"flake": false,
"locked": {
"lastModified": 1710987994,
"narHash": "sha256-NqBzKonCYH+hNpVZzDhrVf+r2i6EwLG/IFBXjE2mC7s=",
"type": "tarball",
"url": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton9-2/GE-Proton9-2.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton9-2/GE-Proton9-2.tar.gz"
}
},
"ren": {
"flake": false,
"locked": {
"lastModified": 1704996573,
"narHash": "sha256-zVIt6Xp+Mvym6gySvHIZJt1QgzKVP/wbTGTubWk6kzI=",
"owner": "robenkleene",
"repo": "ren-find",
"rev": "50c40172e354caffee48932266edd7c7a76a20fd",
"type": "github"
},
"original": {
"owner": "robenkleene",
"repo": "ren-find",
"type": "github"
}
},
"rep": {
"flake": false,
"locked": {
"lastModified": 1707216692,
"narHash": "sha256-/dH+mNtNHaYFndVhoqmz4Sc3HeemoQt1HGD98mb9Qhw=",
"owner": "robenkleene",
"repo": "rep-grep",
"rev": "10510d47e392cb9d30a861c69f702fd194b3fa88",
"type": "github"
},
"original": {
"owner": "robenkleene",
"repo": "rep-grep",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"Comment-nvim-src": "Comment-nvim-src",
"baleia-nvim-src": "baleia-nvim-src", "baleia-nvim-src": "baleia-nvim-src",
"base16-nvim-src": "base16-nvim-src",
"bufferline-nvim-src": "bufferline-nvim-src", "bufferline-nvim-src": "bufferline-nvim-src",
"bypass-paywalls-clean": "bypass-paywalls-clean",
"cmp-nvim-lsp-src": "cmp-nvim-lsp-src", "cmp-nvim-lsp-src": "cmp-nvim-lsp-src",
"comment-nvim-src": "comment-nvim-src",
"darwin": "darwin", "darwin": "darwin",
"disko": "disko", "disko": "disko",
"fidget-nvim-src": "fidget-nvim-src",
"firefox-darwin": "firefox-darwin", "firefox-darwin": "firefox-darwin",
"hmts-nvim-src": "hmts-nvim-src", "hmts-nvim-src": "hmts-nvim-src",
"home-manager": "home-manager", "home-manager": "home-manager",
"kitty-scrollback-nvim-src": "kitty-scrollback-nvim-src",
"nextcloud-cookbook": "nextcloud-cookbook", "nextcloud-cookbook": "nextcloud-cookbook",
"nextcloud-external": "nextcloud-external", "nextcloud-external": "nextcloud-external",
"nextcloud-news": "nextcloud-news", "nextcloud-news": "nextcloud-news",
"nil": "nil", "nextcloud-snappymail": "nextcloud-snappymail",
"nix2vim": "nix2vim", "nix2vim": "nix2vim",
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"null-ls-nvim-src": "null-ls-nvim-src",
"nur": "nur", "nur": "nur",
"nvim-lint-src": "nvim-lint-src",
"nvim-lspconfig-src": "nvim-lspconfig-src", "nvim-lspconfig-src": "nvim-lspconfig-src",
"nvim-tree-lua-src": "nvim-tree-lua-src", "nvim-tree-lua-src": "nvim-tree-lua-src",
"nvim-treesitter-src": "nvim-treesitter-src", "nvim-treesitter-src": "nvim-treesitter-src",
"proton-ge": "proton-ge",
"ren": "ren",
"rep": "rep",
"telescope-nvim-src": "telescope-nvim-src", "telescope-nvim-src": "telescope-nvim-src",
"telescope-project-nvim-src": "telescope-project-nvim-src", "telescope-project-nvim-src": "telescope-project-nvim-src",
"toggleterm-nvim-src": "toggleterm-nvim-src", "toggleterm-nvim-src": "toggleterm-nvim-src",
"tree-sitter-bash": "tree-sitter-bash", "tree-sitter-bash": "tree-sitter-bash",
"tree-sitter-ini": "tree-sitter-ini", "tree-sitter-ini": "tree-sitter-ini",
"tree-sitter-lua": "tree-sitter-lua",
"tree-sitter-puppet": "tree-sitter-puppet", "tree-sitter-puppet": "tree-sitter-puppet",
"tree-sitter-python": "tree-sitter-python", "tree-sitter-python": "tree-sitter-python",
"tree-sitter-rasi": "tree-sitter-rasi", "tree-sitter-rasi": "tree-sitter-rasi",
"vscode-terraform-snippets": "vscode-terraform-snippets", "tree-sitter-vimdoc": "tree-sitter-vimdoc",
"wallpapers": "wallpapers", "wallpapers": "wallpapers",
"wsl": "wsl", "wsl": "wsl",
"zenyd-mpv-scripts": "zenyd-mpv-scripts" "zenyd-mpv-scripts": "zenyd-mpv-scripts"
} }
}, },
"rust-overlay": {
"inputs": {
"flake-utils": [
"nil",
"flake-utils"
],
"nixpkgs": [
"nil",
"nixpkgs"
]
},
"locked": {
"lastModified": 1680488274,
"narHash": "sha256-0vYMrZDdokVmPQQXtFpnqA2wEgCCUXf5a3dDuDVshn0=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "7ec2ff598a172c6e8584457167575b3a1a5d80d8",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -555,16 +610,16 @@
"telescope-nvim-src": { "telescope-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1686302912, "lastModified": 1701167040,
"narHash": "sha256-fV3LLRwAPykVGc4ImOnUSP+WTrPp9Ad9OTfBJ6wqTMk=", "narHash": "sha256-H5RpyWMluE+Yxg7xFX43AZTVW+Yg70DF3FmEGXBUSNg=",
"owner": "nvim-telescope", "owner": "nvim-telescope",
"repo": "telescope.nvim", "repo": "telescope.nvim",
"rev": "776b509f80dd49d8205b9b0d94485568236d1192", "rev": "d90956833d7c27e73c621a61f20b29fdb7122709",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nvim-telescope", "owner": "nvim-telescope",
"ref": "0.1.2", "ref": "0.1.5",
"repo": "telescope.nvim", "repo": "telescope.nvim",
"type": "github" "type": "github"
} }
@ -572,11 +627,11 @@
"telescope-project-nvim-src": { "telescope-project-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1682606566, "lastModified": 1701464478,
"narHash": "sha256-H6lrPjpOUVleKHB0ziI+6dthg9ymitHhEWtcgYJTrKo=", "narHash": "sha256-touMCltcnqkrQYV1NtNeWLQeFVGt+WM3aIWIdKilA7w=",
"owner": "nvim-telescope", "owner": "nvim-telescope",
"repo": "telescope-project.nvim", "repo": "telescope-project.nvim",
"rev": "7c64b181dd4e72deddcf6f319e3bf1e95b2a2f30", "rev": "1aaf16580a614601a7f7077d9639aeb457dc5559",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -588,16 +643,16 @@
"toggleterm-nvim-src": { "toggleterm-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1685434104, "lastModified": 1701858874,
"narHash": "sha256-oiCnBrvft6XxiQtQH8E4F842xhh348SaTpHzaeb+iDY=", "narHash": "sha256-vJApw7XY2wOX9InfWcah+hkNxBfS1+kQUWr4ITxRmgA=",
"owner": "akinsho", "owner": "akinsho",
"repo": "toggleterm.nvim", "repo": "toggleterm.nvim",
"rev": "95204ece0f2a54c89c4395295432f9aeedca7b5f", "rev": "cbd041d91b90cd3c02df03fe6133208888f8e008",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "akinsho", "owner": "akinsho",
"ref": "v2.7.0", "ref": "v2.9.0",
"repo": "toggleterm.nvim", "repo": "toggleterm.nvim",
"type": "github" "type": "github"
} }
@ -605,28 +660,28 @@
"tree-sitter-bash": { "tree-sitter-bash": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1688032601, "lastModified": 1707951703,
"narHash": "sha256-gl5F3IeZa2VqyH/qFj8ey2pRbGq4X8DL5wiyvRrH56U=", "narHash": "sha256-SU5wBy81aANd7oUZvYR14Vd53Ml/cBSwDtO6uG34CaE=",
"owner": "tree-sitter", "owner": "tree-sitter",
"repo": "tree-sitter-bash", "repo": "tree-sitter-bash",
"rev": "493646764e7ad61ce63ce3b8c59ebeb37f71b841", "rev": "975bc70ad95dbbf2733872bc2e0a059c055db983",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tree-sitter", "owner": "tree-sitter",
"ref": "master",
"repo": "tree-sitter-bash", "repo": "tree-sitter-bash",
"rev": "493646764e7ad61ce63ce3b8c59ebeb37f71b841",
"type": "github" "type": "github"
} }
}, },
"tree-sitter-ini": { "tree-sitter-ini": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1690815608, "lastModified": 1699877527,
"narHash": "sha256-IIpKzpA4q1jpYVZ75VZaxWHaqNt8TA427eMOui2s71M=", "narHash": "sha256-dYPeVTNWO4apY5dsjsKViavU7YtLeGTp6BzEemXhsEU=",
"owner": "justinmk", "owner": "justinmk",
"repo": "tree-sitter-ini", "repo": "tree-sitter-ini",
"rev": "7f11a02fb8891482068e0fe419965d7bade81a68", "rev": "bcb84a2d4bcd6f55b911c42deade75c8f90cb0c5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -635,14 +690,31 @@
"type": "github" "type": "github"
} }
}, },
"tree-sitter-lua": {
"flake": false,
"locked": {
"lastModified": 1708499929,
"narHash": "sha256-kzyn6XF4/PN8civ/0UV+ancCMkh7DF2B7WUYxix6aaM=",
"owner": "MunifTanjim",
"repo": "tree-sitter-lua",
"rev": "04c9579dcb917255b2e5f8199df4ae7f587d472f",
"type": "github"
},
"original": {
"owner": "MunifTanjim",
"ref": "main",
"repo": "tree-sitter-lua",
"type": "github"
}
},
"tree-sitter-puppet": { "tree-sitter-puppet": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1690231696, "lastModified": 1709480423,
"narHash": "sha256-YEjjy9WLwITERYqoeSVrRYnwVBIAwdc4o0lvAK9wizw=", "narHash": "sha256-Lwfiby7amjTIOz8QRoC4RdZyFPfFikmQ2sqta4akyH8=",
"owner": "amaanq", "owner": "amaanq",
"repo": "tree-sitter-puppet", "repo": "tree-sitter-puppet",
"rev": "9ce9a5f7d64528572aaa8d59459ba869e634086b", "rev": "5849f9694197a6e822872945b415429c285fdd54",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -654,28 +726,28 @@
"tree-sitter-python": { "tree-sitter-python": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1690493803, "lastModified": 1709753184,
"narHash": "sha256-2btd/NRE6NuGNlx4cq535OrwtWXihiP3VMCJjPCiDOk=", "narHash": "sha256-SqPd9O1OqBEOA+WPLfP3J2vuHWt53G5gI/9FWKQx2/Y=",
"owner": "tree-sitter", "owner": "tree-sitter",
"repo": "tree-sitter-python", "repo": "tree-sitter-python",
"rev": "5af00f64af6bbf822f208243cce5cf75396fb6f5", "rev": "03e88c170cb23142559a406b6e7621c4af3128f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tree-sitter", "owner": "tree-sitter",
"ref": "master",
"repo": "tree-sitter-python", "repo": "tree-sitter-python",
"rev": "5af00f64af6bbf822f208243cce5cf75396fb6f5",
"type": "github" "type": "github"
} }
}, },
"tree-sitter-rasi": { "tree-sitter-rasi": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1678701563, "lastModified": 1707776004,
"narHash": "sha256-2nYZoLcrxxxiOJEySwHUm93lzMg8mU+V7LIP63ntFdA=", "narHash": "sha256-7zhQ5wGm0FFyuTiBVN2KgvUTw8G6fwUGR8HKJ69kR+c=",
"owner": "Fymyte", "owner": "Fymyte",
"repo": "tree-sitter-rasi", "repo": "tree-sitter-rasi",
"rev": "371dac6bcce0df5566c1cfebde69d90ecbeefd2d", "rev": "43196d934a9a6ab3c7093a8683efd0111bb03db1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -684,19 +756,19 @@
"type": "github" "type": "github"
} }
}, },
"vscode-terraform-snippets": { "tree-sitter-vimdoc": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1614849738, "lastModified": 1709370081,
"narHash": "sha256-v392tyzXV+zyBNt5OCB2NBCK7JcByrTa5Ne/nFtSCJI=", "narHash": "sha256-v+hSI/6ocC2KxH8ogCexNcxxhcZsl7OvV9197zBCKr4=",
"owner": "run-at-scale", "owner": "neovim",
"repo": "vscode-terraform-doc-snippets", "repo": "tree-sitter-vimdoc",
"rev": "6ab3e44b566e660f38922cf908e6e547eaa5d4b4", "rev": "016ad75faa854e4e13bc40c517015183b795eed9",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "run-at-scale", "owner": "neovim",
"repo": "vscode-terraform-doc-snippets", "repo": "tree-sitter-vimdoc",
"type": "github" "type": "github"
} }
}, },
@ -719,15 +791,17 @@
"wsl": { "wsl": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2" "nixpkgs": [
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1690553050, "lastModified": 1709980437,
"narHash": "sha256-pK3kF30OykL3v6P8UP6ipihlS34KoGq9SryCj3tHrFw=", "narHash": "sha256-rp1MwfRaZl7TPM4E5i1HxQGJCCfMcIa7dOzTX3SW7ro=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "f7a95a37306c46b42e9ce751977c44c752fd5eca", "rev": "e0b9e6c8ff35c7a28cb6baa02d85a9737a2ee4e9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -739,11 +813,11 @@
"zenyd-mpv-scripts": { "zenyd-mpv-scripts": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1650625438, "lastModified": 1707704915,
"narHash": "sha256-OBCuzCtgfSwj0i/rBNranuu4LRc47jObwQIJgQQoerg=", "narHash": "sha256-9P/8q/OZXfaJMS08acQP4h3/zUA5mKRQee0JmkXcz1w=",
"owner": "zenyd", "owner": "zenyd",
"repo": "mpv-scripts", "repo": "mpv-scripts",
"rev": "19ea069abcb794d1bf8fac2f59b50d71ab992130", "rev": "9bdce0050144cb24f92475f7bdd77180e0e4c26b",
"type": "github" "type": "github"
}, },
"original": { "original": {

141
flake.nix
View File

@ -9,12 +9,15 @@
# Used for MacOS system config # Used for MacOS system config
darwin = { darwin = {
url = "github:/lnl7/nix-darwin/master"; url = "github:lnl7/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# Used for Windows Subsystem for Linux compatibility # Used for Windows Subsystem for Linux compatibility
wsl.url = "github:nix-community/NixOS-WSL"; wsl = {
url = "github:nix-community/NixOS-WSL";
inputs.nixpkgs.follows = "nixpkgs";
};
# Used for user packages and dotfiles # Used for user packages and dotfiles
home-manager = { home-manager = {
@ -56,39 +59,38 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# Nix language server
nil = {
url = "github:oxalica/nil/2023-04-03";
inputs.nixpkgs.follows = "nixpkgs";
};
# Neovim plugins # Neovim plugins
base16-nvim-src = {
url = "github:RRethy/base16-nvim";
flake = false;
};
nvim-lspconfig-src = { nvim-lspconfig-src = {
url = "github:neovim/nvim-lspconfig/v0.1.6"; # https://github.com/neovim/nvim-lspconfig/tags
url = "github:neovim/nvim-lspconfig/v0.1.7";
flake = false; flake = false;
}; };
cmp-nvim-lsp-src = { cmp-nvim-lsp-src = {
url = "github:hrsh7th/cmp-nvim-lsp"; url = "github:hrsh7th/cmp-nvim-lsp";
flake = false; flake = false;
}; };
null-ls-nvim-src = {
url = "github:jose-elias-alvarez/null-ls.nvim";
flake = false;
};
baleia-nvim-src = { baleia-nvim-src = {
# https://github.com/m00qek/baleia.nvim/tags
url = "github:m00qek/baleia.nvim"; url = "github:m00qek/baleia.nvim";
flake = false; flake = false;
}; };
Comment-nvim-src = { comment-nvim-src = {
# https://github.com/numToStr/Comment.nvim/releases
url = "github:numToStr/Comment.nvim/v0.8.0"; url = "github:numToStr/Comment.nvim/v0.8.0";
flake = false; flake = false;
}; };
nvim-treesitter-src = { nvim-treesitter-src = {
url = "github:nvim-treesitter/nvim-treesitter/v0.9.0"; # https://github.com/nvim-treesitter/nvim-treesitter/tags
url = "github:nvim-treesitter/nvim-treesitter/master";
flake = false; flake = false;
}; };
telescope-nvim-src = { telescope-nvim-src = {
url = "github:nvim-telescope/telescope.nvim/0.1.2"; # https://github.com/nvim-telescope/telescope.nvim/releases
url = "github:nvim-telescope/telescope.nvim/0.1.5";
flake = false; flake = false;
}; };
telescope-project-nvim-src = { telescope-project-nvim-src = {
@ -96,39 +98,48 @@
flake = false; flake = false;
}; };
toggleterm-nvim-src = { toggleterm-nvim-src = {
url = "github:akinsho/toggleterm.nvim/v2.7.0"; # https://github.com/akinsho/toggleterm.nvim/tags
url = "github:akinsho/toggleterm.nvim/v2.9.0";
flake = false; flake = false;
}; };
bufferline-nvim-src = { bufferline-nvim-src = {
url = "github:akinsho/bufferline.nvim/v4.2.0"; # https://github.com/akinsho/bufferline.nvim/releases
url = "github:akinsho/bufferline.nvim/v4.5.0";
flake = false; flake = false;
}; };
nvim-tree-lua-src = { nvim-tree-lua-src = {
url = "github:kyazdani42/nvim-tree.lua"; url = "github:kyazdani42/nvim-tree.lua";
flake = false; flake = false;
}; };
vscode-terraform-snippets = {
url = "github:run-at-scale/vscode-terraform-doc-snippets";
flake = false;
};
hmts-nvim-src = { hmts-nvim-src = {
url = "github:calops/hmts.nvim"; url = "github:calops/hmts.nvim";
flake = false; flake = false;
}; };
fidget-nvim-src = {
# https://github.com/j-hui/fidget.nvim/tags
url = "github:j-hui/fidget.nvim/v1.2.0";
flake = false;
};
kitty-scrollback-nvim-src = {
url = "github:mikesmithgh/kitty-scrollback.nvim";
flake = false;
};
nvim-lint-src = {
url = "github:mfussenegger/nvim-lint";
flake = false;
};
# Tree-Sitter Grammars # Tree-Sitter Grammars
tree-sitter-bash = { tree-sitter-bash = {
# Fix: bash highlighting doesn't work as of this commit: url = "github:tree-sitter/tree-sitter-bash/master";
# https://github.com/NixOS/nixpkgs/commit/49cce41b7c5f6b88570a482355d9655ca19c1029
url =
"github:tree-sitter/tree-sitter-bash/493646764e7ad61ce63ce3b8c59ebeb37f71b841";
flake = false; flake = false;
}; };
tree-sitter-python = { tree-sitter-python = {
# Fix: invalid node in position. Broken as of this commit (replaced with newer): url = "github:tree-sitter/tree-sitter-python/master";
# https://github.com/NixOS/nixpkgs/commit/8ec3627796ecc899e6f47f5bf3c3220856ead9c5 flake = false;
url = };
"github:tree-sitter/tree-sitter-python/5af00f64af6bbf822f208243cce5cf75396fb6f5"; tree-sitter-lua = {
url = "github:MunifTanjim/tree-sitter-lua/main";
flake = false; flake = false;
}; };
tree-sitter-ini = { tree-sitter-ini = {
@ -143,6 +154,10 @@
url = "github:Fymyte/tree-sitter-rasi"; url = "github:Fymyte/tree-sitter-rasi";
flake = false; flake = false;
}; };
tree-sitter-vimdoc = {
url = "github:neovim/tree-sitter-vimdoc";
flake = false;
};
# MPV Scripts # MPV Scripts
zenyd-mpv-scripts = { zenyd-mpv-scripts = {
@ -150,20 +165,55 @@
flake = false; flake = false;
}; };
# Ren and rep - CLI find and replace
rep = {
url = "github:robenkleene/rep-grep";
flake = false;
};
ren = {
url = "github:robenkleene/ren-find";
flake = false;
};
# GE version of Proton for game compatibility
# Alternatively, could consider using https://github.com/fufexan/nix-gaming
proton-ge = {
# https://github.com/GloriousEggroll/proton-ge-custom/releases
url =
"https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton9-2/GE-Proton9-2.tar.gz";
flake = false;
};
# Firefox addon from outside the extension store
bypass-paywalls-clean = {
# https://gitlab.com/magnolia1234/bpc-uploads/-/commits/master/?ref_type=HEADS
url = "gitlab:magnolia1234/bpc-uploads";
flake = false;
};
# Nextcloud Apps # Nextcloud Apps
nextcloud-news = { nextcloud-news = {
# https://github.com/nextcloud/news/releases
url = url =
"https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz"; "https://github.com/nextcloud/news/releases/download/25.0.0-alpha3/news.tar.gz";
flake = false; flake = false;
}; };
nextcloud-external = { nextcloud-external = {
# https://github.com/nextcloud-releases/external/releases
url = url =
"https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz"; "https://github.com/nextcloud-releases/external/releases/download/v5.3.1/external-v5.3.1.tar.gz";
flake = false; flake = false;
}; };
nextcloud-cookbook = { nextcloud-cookbook = {
# https://github.com/christianlupus-nextcloud/cookbook-releases/releases/
url = url =
"https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz"; "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.0/cookbook-0.11.0.tar.gz";
flake = false;
};
nextcloud-snappymail = {
# https://github.com/the-djmaze/snappymail/releases
url =
"https://snappymail.eu/repository/nextcloud/snappymail-2.32.0-nextcloud.tar.gz";
flake = false; flake = false;
}; };
@ -186,13 +236,17 @@
dotfilesRepo = "https://github.com/nmasur/dotfiles"; dotfilesRepo = "https://github.com/nmasur/dotfiles";
hostnames = { hostnames = {
git = "git.${baseName}"; git = "git.${baseName}";
influxdb = "influxdb.${baseName}";
irc = "irc.${baseName}";
metrics = "metrics.${baseName}"; metrics = "metrics.${baseName}";
prometheus = "prom.${baseName}"; prometheus = "prom.${baseName}";
paperless = "paper.${baseName}";
secrets = "vault.${baseName}"; secrets = "vault.${baseName}";
stream = "stream.${baseName}"; stream = "stream.${baseName}";
content = "cloud.${baseName}"; content = "cloud.${baseName}";
books = "books.${baseName}"; books = "books.${baseName}";
download = "download.${baseName}"; download = "download.${baseName}";
transmission = "transmission.${baseName}";
}; };
}; };
@ -208,6 +262,10 @@
(import ./overlays/mpv-scripts.nix inputs) (import ./overlays/mpv-scripts.nix inputs)
(import ./overlays/nextcloud-apps.nix inputs) (import ./overlays/nextcloud-apps.nix inputs)
(import ./overlays/betterlockscreen.nix) (import ./overlays/betterlockscreen.nix)
(import ./overlays/proton-ge.nix inputs)
(import ./overlays/gh-collaborators.nix)
(import ./overlays/bypass-paywalls-clean.nix inputs)
(import ./overlays/ren-rep.nix inputs)
]; ];
# System types to support. # System types to support.
@ -222,6 +280,7 @@
# Contains my full system builds, including home-manager # Contains my full system builds, including home-manager
# nixos-rebuild switch --flake .#tempest # nixos-rebuild switch --flake .#tempest
nixosConfigurations = { nixosConfigurations = {
arrow = import ./hosts/arrow { inherit inputs globals overlays; };
tempest = import ./hosts/tempest { inherit inputs globals overlays; }; tempest = import ./hosts/tempest { inherit inputs globals overlays; };
hydra = import ./hosts/hydra { inherit inputs globals overlays; }; hydra = import ./hosts/hydra { inherit inputs globals overlays; };
flame = import ./hosts/flame { inherit inputs globals overlays; }; flame = import ./hosts/flame { inherit inputs globals overlays; };
@ -248,6 +307,8 @@
diskoConfigurations = { root = import ./disks/root.nix; }; diskoConfigurations = { root = import ./disks/root.nix; };
packages = let packages = let
arrow = system:
import ./hosts/arrow { inherit inputs globals overlays system; };
aws = system: aws = system:
import ./hosts/aws { inherit inputs globals overlays system; }; import ./hosts/aws { inherit inputs globals overlays system; };
staff = system: staff = system:
@ -259,8 +320,18 @@
colors = (import ./colorscheme/gruvbox-dark).dark; colors = (import ./colorscheme/gruvbox-dark).dark;
}; };
in { in {
x86_64-linux.arrow = arrow "x86_64-linux";
x86_64-linux.aws = aws "x86_64-linux"; x86_64-linux.aws = aws "x86_64-linux";
x86_64-linux.staff = staff "x86_64-linux"; x86_64-linux.staff = staff "x86_64-linux";
x86_64-linux.image = {
arrow = inputs.nixos-generators.nixosGenerate {
system = "x86_64-linux";
format = "iso";
modules = import ./hosts/arrow/modules.nix {
inherit inputs globals overlays;
};
};
};
# Package Neovim config into standalone package # Package Neovim config into standalone package
x86_64-linux.neovim = neovim "x86_64-linux"; x86_64-linux.neovim = neovim "x86_64-linux";
@ -323,6 +394,10 @@
path = ./templates/haskell; path = ./templates/haskell;
description = "Haskell template"; description = "Haskell template";
}; };
rust = {
path = ./templates/rust;
description = "Rust template";
};
}; };
}; };

View File

@ -12,3 +12,15 @@ These are the individual machines managed by this flake.
| [swan](./swan/default.nix) | Home server | | [swan](./swan/default.nix) | Home server |
| [tempest](./tempest/default.nix) | Linux desktop | | [tempest](./tempest/default.nix) | Linux desktop |
## NixOS Workflow
Each hosts file is imported into [nixosConfigurations](../flake.nix) and passed
the arguments from the flake (inputs, globals, overlays). The `nixosSystem`
function in that hosts file will be called by the NixOS module system during a
nixos-rebuild.
Each module in the each host's `modules` list is either a function or an
attrset. The attrsets will simply apply values to options that have been
declared in the config by other modules. Meanwhile, the functions will be
passed various arguments, several of which you will see listed at the top of
each of their files.

8
hosts/arrow/default.nix Normal file
View File

@ -0,0 +1,8 @@
{ inputs, globals, overlays, ... }:
inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { };
modules = import ./modules.nix { inherit inputs globals overlays; };
}

92
hosts/arrow/main.tf Normal file
View File

@ -0,0 +1,92 @@
terraform {
backend "s3" {
bucket = "noahmasur-terraform"
key = "arrow.tfstate"
region = "auto"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_region_validation = true
skip_requesting_account_id = true
skip_s3_checksum = true
use_path_style = true
/*
ENVIRONMENT VARIABLES
---------------------
AWS_ACCESS_KEY_ID - R2 token
AWS_SECRET_ACCESS_KEY - R2 secret
AWS_ENDPOINT_URL_S3 - R2 location: https://ACCOUNT_ID.r2.cloudflarestorage.com
*/
}
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.42.0"
}
vultr = {
source = "vultr/vultr"
version = "2.19.0"
}
}
}
# locals {
# image_file = one(fileset(path.root, "result/iso/nixos.iso"))
# }
# variable "cloudflare_r2_endpoint" {
# type = string
# description = "Domain for the Cloudflare R2 endpoint"
# }
variable "vultr_api_key" {
type = string
description = "API key for Vultr management"
sensitive = true
}
provider "aws" {
region = "auto"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_region_validation = true
skip_requesting_account_id = true
}
provider "vultr" {
api_key = var.vultr_api_key
}
# data "aws_s3_bucket" "images" {
# bucket = "noahmasur-arrow-images"
# }
#
# resource "aws_s3_object" "image" {
# bucket = data.aws_s3_bucket.images.id
# key = "arrow.iso"
# source = local.image_file
# etag = filemd5(local.image_file)
# acl = "public-read"
# }
resource "vultr_iso_private" "image" {
# url = "https://${var.cloudflare_account_id}.r2.cloudflarestorage.com/${data.aws_s3_bucket.images.id}/${aws_s3_object.image.key}"
url = "https://arrow.images.masu.rs/arrow.iso"
}
resource "vultr_instance" "arrow" {
plan = "vc2-1c-2gb"
region = "ewr"
iso_id = vultr_iso_private.image.id
label = "arrow"
tags = ["arrow"]
enable_ipv6 = false
disable_public_ipv4 = false
backups = "disabled"
ddos_protection = false
activation_email = false
}
output "host_ip" {
value = vultr_instance.arrow.main_ip
}

38
hosts/arrow/modules.nix Normal file
View File

@ -0,0 +1,38 @@
{ inputs, globals, overlays }:
[
globals
inputs.home-manager.nixosModules.home-manager
{
nixpkgs.overlays = overlays;
networking.hostName = "arrow";
physical = false;
server = true;
gui.enable = false;
theme.colors = (import ../../colorscheme/gruvbox).dark;
publicKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s personal"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKpPU2G9rSF8Q6waH62IJexDCQ6lY+8ZyVufGE3xMDGw deploy"
];
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
cloudflare.enable = true;
services.openssh.enable = true;
services.caddy.enable = true;
services.transmission.enable = true;
# nix-index seems to each up too much memory for Vultr
home-manager.users.${globals.user}.programs.nix-index.enable =
inputs.nixpkgs.lib.mkForce false;
virtualisation.vmVariant = {
virtualisation.forwardPorts = [{
from = "host";
host.port = 2222;
guest.port = 22;
}];
};
}
../../modules/common
../../modules/nixos
]

View File

@ -12,8 +12,9 @@ inputs.nixos-generators.nixosGenerate {
gui.enable = false; gui.enable = false;
theme.colors = (import ../../colorscheme/gruvbox).dark; theme.colors = (import ../../colorscheme/gruvbox).dark;
passwordHash = null; passwordHash = null;
publicKey = publicKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s"; "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s personal"
];
# AWS settings require this # AWS settings require this
permitRootLogin = "prohibit-password"; permitRootLogin = "prohibit-password";
} }

View File

@ -26,7 +26,7 @@ data "aws_iam_policy_document" "vmimport" {
actions = [ actions = [
"s3:GetBucketLocation", "s3:GetBucketLocation",
"s3:GetObject", "s3:GetObject",
"s3:ListBucket", "s3:ListBucket",
] ]
resources = [ resources = [
"arn:aws:s3:::${aws_s3_object.image.bucket}", "arn:aws:s3:::${aws_s3_object.image.bucket}",

View File

@ -1,6 +1,8 @@
# The Flame # The Flame
# System configuration for an Oracle free server # System configuration for an Oracle free server
# See [readme](../README.md) to explain how this file works.
# How to install: # How to install:
# https://blog.korfuri.fr/posts/2022/08/nixos-on-an-oracle-free-tier-ampere-machine/ # https://blog.korfuri.fr/posts/2022/08/nixos-on-an-oracle-free-tier-ampere-machine/
# These days, probably use nixos-anywhere instead. # These days, probably use nixos-anywhere instead.
@ -50,14 +52,17 @@ inputs.nixpkgs.lib.nixosSystem {
theme = { colors = (import ../../colorscheme/gruvbox).dark; }; theme = { colors = (import ../../colorscheme/gruvbox).dark; };
# Programs and services # Programs and services
atuin.enable = true;
cloudflare.enable = true; # Proxy traffic with Cloudflare cloudflare.enable = true; # Proxy traffic with Cloudflare
dotfiles.enable = true; # Clone dotfiles dotfiles.enable = true; # Clone dotfiles
neovim.enable = true; neovim.enable = true;
giteaRunner.enable = true; giteaRunner.enable = true;
services.caddy.enable = true; services.caddy.enable = true;
services.grafana.enable = true; services.grafana.enable = true;
services.thelounge.enable = true;
services.openssh.enable = true; services.openssh.enable = true;
services.victoriametrics.enable = true; services.victoriametrics.enable = true;
services.influxdb2.enable = true;
services.gitea.enable = true; services.gitea.enable = true;
services.vaultwarden.enable = true; services.vaultwarden.enable = true;
services.minecraft-server.enable = true; # Setup Minecraft server services.minecraft-server.enable = true; # Setup Minecraft server
@ -79,8 +84,9 @@ inputs.nixpkgs.lib.nixosSystem {
}; };
# Disable passwords, only use SSH key # Disable passwords, only use SSH key
publicKey = publicKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s"; "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s personal"
];
# # Wireguard config for Transmission # # Wireguard config for Transmission
# wireguard.enable = true; # wireguard.enable = true;

View File

@ -1,6 +1,8 @@
# The Hydra # The Hydra
# System configuration for WSL # System configuration for WSL
# See [readme](../README.md) to explain how this file works.
{ inputs, globals, overlays, ... }: { inputs, globals, overlays, ... }:
inputs.nixpkgs.lib.nixosSystem { inputs.nixpkgs.lib.nixosSystem {

View File

@ -4,7 +4,7 @@
{ inputs, globals, overlays, ... }: { inputs, globals, overlays, ... }:
inputs.darwin.lib.darwinSystem { inputs.darwin.lib.darwinSystem {
system = "x86_64-darwin"; system = "aarch64-darwin";
specialArgs = { }; specialArgs = { };
modules = [ modules = [
../../modules/common ../../modules/common
@ -25,6 +25,7 @@ inputs.darwin.lib.darwinSystem {
dark = true; dark = true;
}; };
mail.user = globals.user; mail.user = globals.user;
atuin.enable = true;
charm.enable = true; charm.enable = true;
neovim.enable = true; neovim.enable = true;
mail.enable = true; mail.enable = true;
@ -37,7 +38,9 @@ inputs.darwin.lib.darwinSystem {
nixlang.enable = true; nixlang.enable = true;
terraform.enable = true; terraform.enable = true;
python.enable = true; python.enable = true;
rust.enable = true;
lua.enable = true; lua.enable = true;
obsidian.enable = true;
kubernetes.enable = true; kubernetes.enable = true;
_1password.enable = true; _1password.enable = true;
slack.enable = true; slack.enable = true;

View File

@ -1,6 +1,8 @@
# The Swan # The Swan
# System configuration for my home NAS server # System configuration for my home NAS server
# See [readme](../README.md) to explain how this file works.
{ inputs, globals, overlays, ... }: { inputs, globals, overlays, ... }:
inputs.nixpkgs.lib.nixosSystem { inputs.nixpkgs.lib.nixosSystem {
@ -54,8 +56,15 @@ inputs.nixpkgs.lib.nixosSystem {
devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; }); devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; });
}; };
# Automatically load the ZFS pool on boot boot.zfs = {
boot.zfs.extraPools = [ "tank" ]; # Automatically load the ZFS pool on boot
extraPools = [ "tank" ];
# Only try to decrypt datasets with keyfiles
requestEncryptionCredentials =
[ "tank/archive" "tank/generic" "tank/nextcloud" ];
# If password is requested and fails, continue to boot eventually
passwordTimeout = 300;
};
# Theming # Theming
@ -66,6 +75,7 @@ inputs.nixpkgs.lib.nixosSystem {
theme = { colors = (import ../../colorscheme/gruvbox).dark; }; theme = { colors = (import ../../colorscheme/gruvbox).dark; };
# Programs and services # Programs and services
atuin.enable = true;
neovim.enable = true; neovim.enable = true;
cloudflare.enable = true; cloudflare.enable = true;
dotfiles.enable = true; dotfiles.enable = true;
@ -79,6 +89,8 @@ inputs.nixpkgs.lib.nixosSystem {
services.prometheus.enable = false; services.prometheus.enable = false;
services.vmagent.enable = true; services.vmagent.enable = true;
services.samba.enable = true; services.samba.enable = true;
services.paperless.enable = true;
services.postgresql.enable = true;
# Allows private remote access over the internet # Allows private remote access over the internet
cloudflareTunnel = { cloudflareTunnel = {
@ -97,8 +109,9 @@ inputs.nixpkgs.lib.nixosSystem {
}; };
# Disable passwords, only use SSH key # Disable passwords, only use SSH key
publicKey = publicKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s"; "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s personal"
];
} }
]; ];
} }

View File

@ -1,6 +1,8 @@
# The Tempest # The Tempest
# System configuration for my desktop # System configuration for my desktop
# See [readme](../README.md) to explain how this file works.
{ inputs, globals, overlays, ... }: { inputs, globals, overlays, ... }:
inputs.nixpkgs.lib.nixosSystem { inputs.nixpkgs.lib.nixosSystem {
@ -83,6 +85,7 @@ inputs.nixpkgs.lib.nixosSystem {
gtk.theme.name = inputs.nixpkgs.lib.mkDefault "Adwaita-dark"; gtk.theme.name = inputs.nixpkgs.lib.mkDefault "Adwaita-dark";
# Programs and services # Programs and services
atuin.enable = true;
charm.enable = true; charm.enable = true;
neovim.enable = true; neovim.enable = true;
media.enable = true; media.enable = true;
@ -99,6 +102,8 @@ inputs.nixpkgs.lib.nixosSystem {
keybase.enable = true; keybase.enable = true;
mullvad.enable = false; mullvad.enable = false;
nixlang.enable = true; nixlang.enable = true;
rust.enable = true;
terraform.enable = true;
yt-dlp.enable = true; yt-dlp.enable = true;
gaming = { gaming = {
dwarf-fortress.enable = true; dwarf-fortress.enable = true;

View File

@ -4,3 +4,4 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVknmPi7sG6ES0G0jcsvebzKGWWaMfJTYgvOue6EULI flame ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVknmPi7sG6ES0G0jcsvebzKGWWaMfJTYgvOue6EULI flame
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ9mwXlZnIALt9SnH3FOZvdgHLM5ZqwYUERXBbM7Rwh6 swan ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ9mwXlZnIALt9SnH3FOZvdgHLM5ZqwYUERXBbM7Rwh6 swan
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC3yHivgEXr2ecwe58h9bkhwTYivf3GwL8xenQKMeiUb tempest ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC3yHivgEXr2ecwe58h9bkhwTYivf3GwL8xenQKMeiUb tempest
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICmGHIWBZzRx35/yFgnPJSHN2+35WJ30G9c5tDhPsCrl arrow

View File

@ -9,12 +9,22 @@
}; };
}; };
config = lib.mkIf config = lib.mkIf (config.gui.enable && config._1password.enable) {
(config.gui.enable && config._1password.enable && pkgs.stdenv.isLinux) { unfreePackages = [ "1password" "_1password-gui" "1password-cli" ];
unfreePackages = [ "1password" "_1password-gui" ]; home-manager.users.${config.user} = {
home-manager.users.${config.user} = { home.packages = with pkgs; [ _1password-gui _1password ];
home.packages = with pkgs; [ _1password-gui ];
};
}; };
# https://1password.community/discussion/135462/firefox-extension-does-not-connect-to-linux-app
# On Mac, does not apply: https://1password.community/discussion/142794/app-and-browser-integration
# However, the button doesn't work either:
# https://1password.community/discussion/140735/extending-support-for-trusted-web-browsers
environment.etc."1password/custom_allowed_browsers".text = ''
${
config.home-manager.users.${config.user}.programs.firefox.package
}/Applications/Firefox.app/Contents/MacOS/firefox
firefox
'';
};
} }

View File

@ -11,8 +11,8 @@
config = lib.mkIf (config.gui.enable && config.discord.enable) { config = lib.mkIf (config.gui.enable && config.discord.enable) {
unfreePackages = [ "discord" ]; unfreePackages = [ "discord" ];
environment.systemPackages = [ pkgs.discord ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
home.packages = with pkgs; [ discord ];
xdg.configFile."discord/settings.json".text = '' xdg.configFile."discord/settings.json".text = ''
{ {
"BACKGROUND_COLOR": "#202225", "BACKGROUND_COLOR": "#202225",

View File

@ -28,22 +28,22 @@
id = 0; id = 0;
name = "default"; name = "default";
isDefault = true; isDefault = true;
# https://nur.nix-community.org/repos/rycee/
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
vimium
multi-account-containers
facebook-container
(lib.mkIf config._1password.enable onepassword-password-manager) (lib.mkIf config._1password.enable onepassword-password-manager)
pkgs.bypass-paywalls-clean
darkreader
don-t-fuck-with-paste
facebook-container
markdownload
multi-account-containers
okta-browser-plugin okta-browser-plugin
sponsorblock
reddit-enhancement-suite reddit-enhancement-suite
return-youtube-dislikes return-youtube-dislikes
markdownload sponsorblock
darkreader ublock-origin
snowflake ublacklist
don-t-fuck-with-paste vimium
i-dont-care-about-cookies
wappalyzer
]; ];
settings = { settings = {
"app.update.auto" = false; "app.update.auto" = false;
@ -73,6 +73,8 @@
"media.ffmpeg.vaapi.enabled" = "media.ffmpeg.vaapi.enabled" =
true; # Enable hardware video acceleration true; # Enable hardware video acceleration
"cookiebanners.ui.desktop.enabled" = true; # Reject cookie popups "cookiebanners.ui.desktop.enabled" = true; # Reject cookie popups
"devtools.command-button-screenshot.enabled" =
true; # Scrolling screenshot of entire page
"svg.context-properties.content.enabled" = true; # Sidebery styling "svg.context-properties.content.enabled" = true; # Sidebery styling
}; };
userChrome = '' userChrome = ''
@ -114,7 +116,7 @@
background-color: ${config.theme.colors.base00}; background-color: ${config.theme.colors.base00};
color: ${config.theme.colors.base06} !important; color: ${config.theme.colors.base06} !important;
} }
.tab-content[selected=true] { .tab-content[selected] {
border-bottom: 2px solid color-mix(in srgb, var(--identity-tab-color) 25%, transparent); border-bottom: 2px solid color-mix(in srgb, var(--identity-tab-color) 25%, transparent);
background-color: ${config.theme.colors.base01} !important; background-color: ${config.theme.colors.base01} !important;
color: ${config.theme.colors.base07} !important; color: ${config.theme.colors.base07} !important;
@ -161,6 +163,11 @@
}; };
xdg.mimeApps = {
associations.added = { "text.html" = [ "firefox.desktop" ]; };
defaultApplications = { "text.html" = [ "firefox.desktop" ]; };
};
xsession.windowManager.i3.config.keybindings = xsession.windowManager.i3.config.keybindings =
lib.mkIf pkgs.stdenv.isLinux { lib.mkIf pkgs.stdenv.isLinux {
"${ "${

View File

@ -11,10 +11,23 @@
config = lib.mkIf (config.gui.enable && config.kitty.enable) { config = lib.mkIf (config.gui.enable && config.kitty.enable) {
terminal = "${pkgs.kitty}/bin/kitty"; # Set the Rofi-Systemd terminal for viewing logs
# Using optionalAttrs because only available in NixOS
environment = { } // lib.attrsets.optionalAttrs
(builtins.hasAttr "sessionVariables" config.environment) {
sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.kitty}/bin/kitty";
};
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
# Set the i3 terminal
xsession.windowManager.i3.config.terminal =
lib.mkIf pkgs.stdenv.isLinux "kitty";
# Set the Rofi terminal for running programs
programs.rofi.terminal =
lib.mkIf pkgs.stdenv.isLinux "${pkgs.kitty}/bin/kitty";
# Display images in the terminal # Display images in the terminal
programs.fish.shellAliases = { programs.fish.shellAliases = {
icat = "kitty +kitten icat"; icat = "kitty +kitten icat";
@ -32,9 +45,20 @@
# Easy fullscreen toggle (for macOS) # Easy fullscreen toggle (for macOS)
"super+f" = "toggle_fullscreen"; "super+f" = "toggle_fullscreen";
# Kitty scrollback nvim
"kitty_mod+h" = "kitty_scrollback_nvim";
"kitty_mod+g" =
"kitty_scrollback_nvim --config ksb_builtin_last_cmd_output";
}; };
settings = { settings = {
# Required for kitty-scrollback.nvim
allow_remote_control = "socket-only";
listen_on = "unix:/tmp/kitty";
action_alias =
"kitty_scrollback_nvim kitten ${pkgs.vimPlugins.kitty-scrollback-nvim}/python/kitty_scrollback_nvim.py";
# Colors (adapted from: https://github.com/kdrag0n/base16-kitty/blob/master/templates/default-256.mustache) # Colors (adapted from: https://github.com/kdrag0n/base16-kitty/blob/master/templates/default-256.mustache)
background = config.theme.colors.base00; background = config.theme.colors.base00;
foreground = config.theme.colors.base05; foreground = config.theme.colors.base05;
@ -79,8 +103,8 @@
color21 = config.theme.colors.base06; color21 = config.theme.colors.base06;
# Scrollback # Scrollback
scrolling_lines = 10000; scrollback_lines = 10000;
scrollback_pager_history_size = 10; # MB scrollback_pager_history_size = 300; # MB
# Window # Window
window_padding_width = 6; window_padding_width = 6;

View File

@ -40,6 +40,7 @@
associations.added = { associations.added = {
"application/pdf" = [ "pwmt.zathura-cb.desktop" ]; "application/pdf" = [ "pwmt.zathura-cb.desktop" ];
"image/jpeg" = [ "nsxiv.desktop" ]; "image/jpeg" = [ "nsxiv.desktop" ];
"image/png" = [ "nsxiv.desktop" ];
"image/*" = [ "nsxiv.desktop" ]; "image/*" = [ "nsxiv.desktop" ];
}; };
associations.removed = { associations.removed = {
@ -48,6 +49,7 @@
defaultApplications = { defaultApplications = {
"application/pdf" = [ "pwmt.zathura-cb.desktop" ]; "application/pdf" = [ "pwmt.zathura-cb.desktop" ];
"image/jpeg" = [ "nsxiv.desktop" ]; "image/jpeg" = [ "nsxiv.desktop" ];
"image/png" = [ "nsxiv.desktop" ];
"image/*" = [ "nsxiv.desktop" ]; "image/*" = [ "nsxiv.desktop" ];
}; };
}; };

View File

@ -15,8 +15,9 @@
home.packages = with pkgs; [ obsidian ]; home.packages = with pkgs; [ obsidian ];
}; };
# Broken on 2023-04-16 # Broken on 2023-12-11
nixpkgs.config.permittedInsecurePackages = [ "electron-21.4.0" ]; # https://forum.obsidian.md/t/electron-25-is-now-eol-please-upgrade-to-a-newer-version/72878/8
nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
}; };

View File

@ -75,10 +75,18 @@
type = lib.types.str; type = lib.types.str;
description = "Hostname for metrics server."; description = "Hostname for metrics server.";
}; };
paperless = lib.mkOption {
type = lib.types.str;
description = "Hostname for document server (paperless-ngx).";
};
prometheus = lib.mkOption { prometheus = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for Prometheus server."; description = "Hostname for Prometheus server.";
}; };
influxdb = lib.mkOption {
type = lib.types.str;
description = "Hostname for InfluxDB2 server.";
};
secrets = lib.mkOption { secrets = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for passwords and secrets (Vaultwarden)."; description = "Hostname for passwords and secrets (Vaultwarden).";
@ -99,44 +107,20 @@
type = lib.types.str; type = lib.types.str;
description = "Hostname for download services."; description = "Hostname for download services.";
}; };
irc = lib.mkOption {
type = lib.types.str;
description = "Hostname for IRC services.";
};
transmission = lib.mkOption {
type = lib.types.str;
description = "Hostname for peer2peer downloads (Transmission).";
};
}; };
}; };
config = let stateVersion = "23.05"; config = let stateVersion = "23.05";
in { in {
nix = {
# Enable features in Nix commands
extraOptions = ''
experimental-features = nix-command flakes
warn-dirty = false
'';
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
settings = {
# Add community Cachix to binary cache
# Don't use with macOS because blocked by corporate firewall
builders-use-substitutes = true;
substituters = lib.mkIf (!pkgs.stdenv.isDarwin)
[ "https://nix-community.cachix.org" ];
trusted-public-keys = lib.mkIf (!pkgs.stdenv.isDarwin) [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
# Scans and hard links identical files in the store
# Not working with macOS: https://github.com/NixOS/nix/issues/7273
auto-optimise-store = lib.mkIf (!pkgs.stdenv.isDarwin) true;
};
};
# Basic common system packages for all devices # Basic common system packages for all devices
environment.systemPackages = with pkgs; [ git vim wget curl ]; environment.systemPackages = with pkgs; [ git vim wget curl ];

View File

@ -68,7 +68,7 @@
"!" = ":term<space>"; "!" = ":term<space>";
"|" = ":pipe<space>"; "|" = ":pipe<space>";
"/" = ":search<space>"; "/" = ":search<space>-a<space>";
"\\" = ":filter <space>"; "\\" = ":filter <space>";
n = ":next-result<Enter>"; n = ":next-result<Enter>";
N = ":prev-result<Enter>"; N = ":prev-result<Enter>";

View File

@ -9,8 +9,6 @@
programs.himalaya = { enable = true; }; programs.himalaya = { enable = true; };
accounts.email.accounts.home.himalaya = { accounts.email.accounts.home.himalaya = {
enable = true; enable = true;
backend = "imap";
sender = "smtp";
settings = { settings = {
downloads-dir = config.userDirs.download; downloads-dir = config.userDirs.download;
smtp-insecure = true; smtp-insecure = true;

View File

@ -8,7 +8,7 @@
}; };
config = { config = {
plugins = [ pkgs.vimPlugins.nvim-base16 ]; plugins = [ pkgs.vimPlugins.base16-nvim ];
setup.base16-colorscheme = config.colors; setup.base16-colorscheme = config.colors;
# Telescope isn't working, shut off for now # Telescope isn't working, shut off for now

View File

@ -9,7 +9,6 @@
pkgs.vimPlugins.luasnip pkgs.vimPlugins.luasnip
pkgs.vimPlugins.cmp_luasnip pkgs.vimPlugins.cmp_luasnip
pkgs.vimPlugins.cmp-rg pkgs.vimPlugins.cmp-rg
pkgs.vimPlugins.friendly-snippets
]; ];
use.cmp.setup = dsl.callWith { use.cmp.setup = dsl.callWith {
@ -24,13 +23,6 @@
end end
''; '';
# Enable Luasnip snippet completion
snippet.expand = dsl.rawLua ''
function(args)
require("luasnip").lsp_expand(args.body)
end
'';
# Basic completion keybinds # Basic completion keybinds
mapping = { mapping = {
"['<C-n>']" = dsl.rawLua "['<C-n>']" = dsl.rawLua
@ -70,7 +62,6 @@
sources = [ sources = [
{ name = "nvim_lua"; } # Fills in common Neovim lua functions { name = "nvim_lua"; } # Fills in common Neovim lua functions
{ name = "nvim_lsp"; } # LSP results { name = "nvim_lsp"; } # LSP results
{ name = "luasnip"; } # Snippets
{ name = "path"; } # Shell completion from current PATH { name = "path"; } # Shell completion from current PATH
{ {
name = "buffer"; # Grep for text from the current text buffer name = "buffer"; # Grep for text from the current text buffer
@ -119,7 +110,6 @@
} }
vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
vim_item.menu = ({ vim_item.menu = ({
luasnip = "[Snippet]",
buffer = "[Buffer]", buffer = "[Buffer]",
path = "[Path]", path = "[Path]",
rg = "[Grep]", rg = "[Grep]",
@ -139,13 +129,6 @@
}; };
lua = '' lua = ''
-- Load snippets
-- Check status: :lua require("luasnip").log.open()
require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load({ paths = { "${
builtins.toString pkgs.vscode-terraform-snippets
}" } })
-- Use buffer source for `/` -- Use buffer source for `/`
require('cmp').setup.cmdline("/", { require('cmp').setup.cmdline("/", {
sources = { sources = {

View File

@ -0,0 +1,14 @@
-- Keymap to open file in GitHub web
vim.keymap.set("n", "<Leader>gr", ":!gh browse %<CR><CR>", { silent = true })
-- Pop a terminal to watch the current run
local gitwatch =
require("toggleterm.terminal").Terminal:new({ cmd = "fish --interactive --init-command 'gh run watch'" })
-- Set a toggle for this terminal
function GITWATCH_TOGGLE()
gitwatch:toggle()
end
-- Keymap to toggle the run
vim.keymap.set("n", "<Leader>gw", GITWATCH_TOGGLE)

View File

@ -0,0 +1,6 @@
local k9s = require("toggleterm.terminal").Terminal:new({ cmd = "k9s" })
function K9S_TOGGLE()
k9s:toggle()
end
vim.keymap.set("n", "<Leader>9", K9S_TOGGLE)

View File

@ -1,76 +1,112 @@
{ pkgs, dsl, ... }: { { pkgs, lib, config, dsl, ... }: {
plugins = [ # Terraform optional because non-free
pkgs.vimPlugins.nvim-lspconfig options.terraform = lib.mkEnableOption "Whether to enable Terraform LSP";
pkgs.vimPlugins.lsp-colors-nvim options.github = lib.mkEnableOption "Whether to enable GitHub features";
pkgs.vimPlugins.null-ls-nvim options.kubernetes =
]; lib.mkEnableOption "Whether to enable Kubernetes features";
config = {
plugins = [
pkgs.vimPlugins.nvim-lspconfig
pkgs.vimPlugins.conform-nvim
pkgs.vimPlugins.fidget-nvim
pkgs.vimPlugins.nvim-lint
];
setup.fidget = { };
use.lspconfig.lua_ls.setup = dsl.callWith {
settings = { Lua = { diagnostics = { globals = [ "vim" "hs" ]; }; }; };
capabilities =
dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
cmd = [ "${pkgs.lua-language-server}/bin/lua-language-server" ];
};
use.lspconfig.nil_ls.setup = dsl.callWith {
cmd = [ "${pkgs.nil}/bin/nil" ];
capabilities =
dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
};
use.lspconfig.pyright.setup = dsl.callWith {
cmd = [ "${pkgs.pyright}/bin/pyright-langserver" "--stdio" ];
};
use.lspconfig.terraformls.setup = dsl.callWith {
cmd = if config.terraform then [
"${pkgs.terraform-ls}/bin/terraform-ls"
"serve"
] else
[ "echo" ];
};
use.lspconfig.rust_analyzer.setup = dsl.callWith {
cmd = [ "${pkgs.rust-analyzer}/bin/rust-analyzer" ];
settings = {
"['rust-analyzer']" = {
check = { command = "clippy"; };
files = { excludeDirs = [ ".direnv" ]; };
};
};
};
setup.conform = {
format_on_save = {
# These options will be passed to conform.format()
timeout_ms = 1500;
lsp_fallback = true;
};
formatters_by_ft = {
lua = [ "stylua" ];
python = [ "black" ];
fish = [ "fish_indent" ];
nix = [ "nixfmt" ];
rust = [ "rustfmt" ];
sh = [ "shfmt" ];
terraform = if config.terraform then [ "terraform_fmt" ] else [ ];
hcl = if config.terraform then [ "terraform_fmt" ] else [ ];
};
formatters = {
lua.command = "${pkgs.stylua}/bin/stylua";
black.command = "${pkgs.black}/bin/black";
fish_indent.command = "${pkgs.fish}/bin/fish_indent";
nixfmt.command = "${pkgs.nixfmt}/bin/nixfmt";
rustfmt = {
command = "${pkgs.rustfmt}/bin/rustfmt";
prepend_args = [ "--edition" "2021" ];
};
shfmt = {
command = "${pkgs.shfmt}/bin/shfmt";
prepend_args = [ "-i" "4" "-ci" ];
};
terraform_fmt.command =
if config.terraform then "${pkgs.terraform}/bin/terraform" else "";
};
};
use.lint = {
linters_by_ft = dsl.toTable {
python = [ "ruff" ];
sh = [ "shellcheck" ];
};
};
vim.api.nvim_create_autocmd = dsl.callWith [
(dsl.toTable [ "BufEnter" "BufWritePost" ])
(dsl.rawLua "{ callback = function() require('lint').try_lint() end }")
];
lua = ''
${builtins.readFile ./lsp.lua}
local ruff = require('lint').linters.ruff; ruff.cmd = "${pkgs.ruff}/bin/ruff"
local shellcheck = require('lint').linters.shellcheck; shellcheck.cmd = "${pkgs.shellcheck}/bin/shellcheck"
-- Prevent infinite log size (change this when debugging)
vim.lsp.set_log_level("off")
'';
use.lspconfig.lua_ls.setup = dsl.callWith {
settings = { Lua = { diagnostics = { globals = [ "vim" "hs" ]; }; }; };
capabilities = dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
cmd = [ "${pkgs.lua-language-server}/bin/lua-language-server" ];
}; };
use.lspconfig.nil_ls.setup = dsl.callWith {
cmd = [ "${pkgs.nil}/bin/nil" ];
capabilities = dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
};
use.lspconfig.pyright.setup = dsl.callWith {
cmd = [ "${pkgs.pyright}/bin/pyright-langserver" "--stdio" ];
};
use.lspconfig.terraformls.setup =
dsl.callWith { cmd = [ "${pkgs.terraform-ls}/bin/terraform-ls" "serve" ]; };
vim.api.nvim_create_augroup = dsl.callWith [ "LspFormatting" { } ];
lua = ''
${builtins.readFile ./lsp.lua}
-- Prevent infinite log size (change this when debugging)
vim.lsp.set_log_level("off")
require("null-ls").setup({
sources = {
require("null-ls").builtins.formatting.stylua.with({ command = "${pkgs.stylua}/bin/stylua" }),
require("null-ls").builtins.formatting.black.with({ command = "${pkgs.black}/bin/black" }),
require("null-ls").builtins.diagnostics.ruff.with({ command = "${pkgs.ruff}/bin/ruff" }),
require("null-ls").builtins.formatting.fish_indent.with({ command = "${pkgs.fish}/bin/fish_indent" }),
require("null-ls").builtins.formatting.nixfmt.with({ command = "${pkgs.nixfmt}/bin/nixfmt" }),
require("null-ls").builtins.formatting.rustfmt.with({ command = "${pkgs.rustfmt}/bin/rustfmt" }),
require("null-ls").builtins.diagnostics.shellcheck.with({ command = "${pkgs.shellcheck}/bin/shellcheck" }),
require("null-ls").builtins.formatting.shfmt.with({
command = "${pkgs.shfmt}/bin/shfmt",
extra_args = { "-i", "4", "-ci" },
}),
require("null-ls").builtins.formatting.terraform_fmt.with({
command = "${pkgs.terraform}/bin/terraform",
extra_filetypes = { "hcl" },
}),
},
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
-- Auto-format on save
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ bufnr = bufnr })
end,
})
-- Use internal formatting for bindings like gq.
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
vim.bo[args.buf].formatexpr = nil
end,
})
end
end,
})
'';
} }

View File

@ -8,13 +8,15 @@
pkgs.vimPlugins.glow-nvim # Markdown preview popup pkgs.vimPlugins.glow-nvim # Markdown preview popup
pkgs.vimPlugins.nvim-colorizer-lua # Hex color previews pkgs.vimPlugins.nvim-colorizer-lua # Hex color previews
pkgs.vimPlugins.which-key-nvim # Keybind helper pkgs.vimPlugins.which-key-nvim # Keybind helper
pkgs.vimPlugins.kitty-scrollback-nvim # Scrollback pager for kitty
]; ];
# Initialize some plugins # Initialize some plugins
setup.Comment = { }; setup.Comment = { };
setup.colorizer = { }; setup.colorizer = { user_default_options = { names = false; }; };
setup.glow = { }; setup.glow = { };
setup.which-key = { }; setup.which-key = { };
setup.kitty-scrollback = { };
vim.o = { vim.o = {
termguicolors = true; # Set to truecolor termguicolors = true; # Set to truecolor
@ -69,10 +71,6 @@
" Remember last position when reopening file " Remember last position when reopening file
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
" LaTeX options
au FileType tex inoremap ;bf \textbf{}<Esc>i
au BufWritePost *.tex silent! execute "!pdflatex -output-directory=%:p:h % >/dev/null 2>&1" | redraw!
" Flash highlight when yanking " Flash highlight when yanking
au TextYankPost * silent! lua vim.highlight.on_yank { timeout = 250 } au TextYankPost * silent! lua vim.highlight.on_yank { timeout = 250 }
''; '';

View File

@ -4,6 +4,7 @@
(pkgs.vimPlugins.nvim-treesitter.withPlugins (_plugins: (pkgs.vimPlugins.nvim-treesitter.withPlugins (_plugins:
with pkgs.tree-sitter-grammars; [ with pkgs.tree-sitter-grammars; [
tree-sitter-bash tree-sitter-bash
tree-sitter-c
tree-sitter-fish tree-sitter-fish
tree-sitter-hcl tree-sitter-hcl
tree-sitter-ini tree-sitter-ini
@ -16,15 +17,16 @@
tree-sitter-python tree-sitter-python
tree-sitter-rasi tree-sitter-rasi
tree-sitter-toml tree-sitter-toml
tree-sitter-vimdoc
tree-sitter-yaml tree-sitter-yaml
])) ]))
pkgs.vimPlugins.vim-matchup # Better % jumping in languages pkgs.vimPlugins.vim-matchup # Better % jumping in languages
pkgs.vimPlugins.playground # Tree-sitter experimenting pkgs.vimPlugins.playground # Tree-sitter experimenting
pkgs.vimPlugins.nginx-vim pkgs.vimPlugins.nginx-vim
pkgs.vimPlugins.vim-helm pkgs.vimPlugins.vim-helm
pkgs.baleia-nvim # Clean ANSI from kitty scrollback pkgs.vimPlugins.baleia-nvim # Clean ANSI from kitty scrollback
# pkgs.hmts-nvim # Tree-sitter injections for home-manager # pkgs.vimPlugins.hmts-nvim # Tree-sitter injections for home-manager
(pkgs.vimUtils.buildVimPluginFrom2Nix { (pkgs.vimUtils.buildVimPlugin {
pname = "nmasur"; pname = "nmasur";
version = "0.1"; version = "0.1";
src = ../plugin; src = ../plugin;

View File

@ -26,17 +26,5 @@ function NIXPKGS_TOGGLE()
nixpkgs:toggle() nixpkgs:toggle()
end end
local gitwatch = terminal:new({ cmd = "fish --interactive --init-command 'gh run watch'" })
function GITWATCH_TOGGLE()
gitwatch:toggle()
end
local k9s = terminal:new({ cmd = "k9s" })
function K9S_TOGGLE()
k9s:toggle()
end
vim.keymap.set("n", "<Leader>t", TERM_TOGGLE) vim.keymap.set("n", "<Leader>t", TERM_TOGGLE)
vim.keymap.set("n", "<Leader>P", NIXPKGS_TOGGLE) vim.keymap.set("n", "<Leader>P", NIXPKGS_TOGGLE)
vim.keymap.set("n", "<Leader>gw", GITWATCH_TOGGLE)
vim.keymap.set("n", "<Leader>9", K9S_TOGGLE)

View File

@ -1,4 +1,4 @@
{ pkgs, dsl, ... }: { { pkgs, dsl, config, ... }: {
# Toggleterm provides a floating terminal inside the editor for quick access # Toggleterm provides a floating terminal inside the editor for quick access
@ -10,6 +10,10 @@
direction = "float"; direction = "float";
}; };
lua = builtins.readFile ./toggleterm.lua; lua = ''
${builtins.readFile ./toggleterm.lua}
${if config.github then (builtins.readFile ./github.lua) else ""}
${if config.kubernetes then (builtins.readFile ./kubernetes.lua) else ""}
'';
} }

View File

@ -63,7 +63,6 @@
''; '';
view = { # Set look and feel view = { # Set look and feel
width = 30; width = 30;
hide_root_folder = false;
side = "left"; side = "left";
number = false; number = false;
relativenumber = false; relativenumber = false;

View File

@ -5,6 +5,9 @@ let
neovim = import ./package { neovim = import ./package {
inherit pkgs; inherit pkgs;
colors = config.theme.colors; colors = config.theme.colors;
terraform = config.terraform.enable;
github = true;
kubernetes = config.kubernetes.enable;
}; };
in { in {
@ -42,8 +45,8 @@ in {
# Requires removing some of the ANSI escape codes that are sent to the # Requires removing some of the ANSI escape codes that are sent to the
# scrollback using sed and baleia, as well as removing several # scrollback using sed and baleia, as well as removing several
# unnecessary features. # unnecessary features.
programs.kitty.settings.scrollback_pager = '' programs.kitty.settings.scrollback_pager =
$SHELL -c 'sed -r "s/[[:cntrl:]]\]133;[AC]..//g" | ${neovim}/bin/nvim -c "setlocal nonumber norelativenumber nolist laststatus=0" -c "lua baleia = require(\"baleia\").setup({}); baleia.once(0)" -c "map <silent> q :qa!<CR>" -c "autocmd VimEnter * normal G"' ''; "${neovim}/bin/nvim --headless +'KittyScrollbackGenerateKittens' +'set nonumber' +'set norelativenumber' +'%print' +'quit!' 2>&1";
# Create a desktop option for launching Neovim from a file manager # Create a desktop option for launching Neovim from a file manager
# (Requires launching the terminal and then executing Neovim) # (Requires launching the terminal and then executing Neovim)

View File

@ -39,7 +39,6 @@ key("n", "<Leader>fs", ":write<CR>")
key("n", "<Leader>fd", ":lcd %:p:h<CR>", { silent = true }) key("n", "<Leader>fd", ":lcd %:p:h<CR>", { silent = true })
key("n", "<Leader>fu", ":lcd ..<CR>", { silent = true }) key("n", "<Leader>fu", ":lcd ..<CR>", { silent = true })
key("n", "<Leader><Tab>", ":b#<CR>", { silent = true }) key("n", "<Leader><Tab>", ":b#<CR>", { silent = true })
key("n", "<Leader>gr", ":!gh browse %<CR><CR>", { silent = true })
key("n", "<Leader>tt", [[<Cmd>exe 'edit $NOTES_PATH/journal/'.strftime("%Y-%m-%d_%a").'.md'<CR>]]) key("n", "<Leader>tt", [[<Cmd>exe 'edit $NOTES_PATH/journal/'.strftime("%Y-%m-%d_%a").'.md'<CR>]])
key("n", "<Leader>jj", ":!journal<CR>:e<CR>") key("n", "<Leader>jj", ":!journal<CR>:e<CR>")
@ -65,6 +64,12 @@ key("n", "<C-Down>", ":resize -2<CR>", { silent = true })
key("n", "<C-Left>", ":vertical resize -2<CR>", { silent = true }) key("n", "<C-Left>", ":vertical resize -2<CR>", { silent = true })
key("n", "<C-Right>", ":vertical resize +2<CR>", { silent = true }) key("n", "<C-Right>", ":vertical resize +2<CR>", { silent = true })
-- Quickfix
key("n", "]q", ":cnext<CR>")
key("n", "[q", ":cprevious<CR>")
key("n", "co", ":copen<CR>")
key("n", "cq", ":cclose<CR>")
-- Other -- Other
key("n", "<A-CR>", ":noh<CR>", { silent = true }) --- Clear search in VimWiki key("n", "<A-CR>", ":noh<CR>", { silent = true }) --- Clear search in VimWiki
key("n", "Y", "y$") --- Copy to end of line key("n", "Y", "y$") --- Copy to end of line

View File

@ -26,13 +26,13 @@
# ] ++ extraConfig; # ] ++ extraConfig;
# } # }
{ pkgs, colors, ... }: { pkgs, colors, terraform ? false, github ? false, kubernetes ? false, ... }:
# Comes from nix2vim overlay: # Comes from nix2vim overlay:
# https://github.com/gytis-ivaskevicius/nix2vim/blob/master/lib/neovim-builder.nix # https://github.com/gytis-ivaskevicius/nix2vim/blob/master/lib/neovim-builder.nix
pkgs.neovimBuilder { pkgs.neovimBuilder {
package = pkgs.neovim-unwrapped; package = pkgs.neovim-unwrapped;
inherit colors; inherit colors terraform github kubernetes;
imports = [ imports = [
../config/align.nix ../config/align.nix
../config/bufferline.nix ../config/bufferline.nix

View File

@ -6,6 +6,7 @@
./lua.nix ./lua.nix
./nix.nix ./nix.nix
./python.nix ./python.nix
./rust.nix
./terraform.nix ./terraform.nix
]; ];

View File

@ -24,113 +24,125 @@
# Terminal Kubernetes UI # Terminal Kubernetes UI
programs.k9s = { programs.k9s = {
enable = true; enable = true;
# settings = { k9s = { headless = true; }; }; settings = {
skin = {
k9s = { k9s = {
body = { ui = {
fgColor = config.theme.colors.base06; enableMouse = true;
bgColor = config.theme.colors.base00; headless = true;
logoColor = config.theme.colors.base02; # *blue ? logoless = true;
crumbsless = false;
skin = "main";
}; };
# Search bar };
prompt = { };
fgColor = config.theme.colors.base06; skins = {
bgColor = config.theme.colors.base00; main = {
suggestColor = config.theme.colors.base03; k9s = {
}; body = {
# Header left side
info = {
fgColor = config.theme.colors.base04;
sectionColor = config.theme.colors.base05;
};
dialog = {
fgColor = config.theme.colors.base06;
bgColor = config.theme.colors.base00;
buttonFgColor = config.theme.colors.base06;
buttonBgColor = config.theme.colors.base0E;
buttonFocusFgColor = config.theme.colors.base07;
buttonFocusBgColor = config.theme.colors.base02; # *cyan
labelFgColor = config.theme.colors.base09;
fieldFgColor = config.theme.colors.base06;
};
frame = {
border = {
fgColor = config.theme.colors.base01;
focusColor = config.theme.colors.base06;
};
menu = {
fgColor = config.theme.colors.base06; fgColor = config.theme.colors.base06;
keyColor = config.theme.colors.base0E; # *magenta bgColor = "default";
numKeyColor = config.theme.colors.base0E; # *magenta logoColor = config.theme.colors.base02; # *blue ?
}; };
crumbs = { # Search bar
prompt = {
fgColor = config.theme.colors.base06; fgColor = config.theme.colors.base06;
bgColor = config.theme.colors.base01; bgColor = "default";
activeColor = config.theme.colors.base03; suggestColor = config.theme.colors.base03;
}; };
status = { # Header left side
newColor = config.theme.colors.base04; # *cyan info = {
modifyColor = config.theme.colors.base0D; # *blue fgColor = config.theme.colors.base04;
addColor = config.theme.colors.base0B; # *green sectionColor = config.theme.colors.base05;
errorColor = config.theme.colors.base08; # *red
highlightColor = config.theme.colors.base09; # *orange
killColor = config.theme.colors.base03; # *comment
completedColor = config.theme.colors.base03; # *comment
}; };
title = { dialog = {
fgColor = config.theme.colors.base06; fgColor = config.theme.colors.base06;
bgColor = config.theme.colors.base00; bgColor = "default";
highlightColor = config.theme.colors.base09; # *orange buttonFgColor = config.theme.colors.base06;
counterColor = config.theme.colors.base0D; # *blue buttonBgColor = config.theme.colors.base0E;
filterColor = config.theme.colors.base0E; # *magenta buttonFocusFgColor = config.theme.colors.base07;
buttonFocusBgColor = config.theme.colors.base02; # *cyan
labelFgColor = config.theme.colors.base09;
fieldFgColor = config.theme.colors.base06;
}; };
}; frame = {
views = { border = {
charts = { fgColor = config.theme.colors.base01;
bgColor = config.theme.colors.base00; focusColor = config.theme.colors.base06;
defaultDialColors = };
[ config.theme.colors.base0D config.theme.colors.base08 ]; menu = {
# - *blue fgColor = config.theme.colors.base06;
# - *red keyColor = config.theme.colors.base0E; # *magenta
defaultChartColors = numKeyColor = config.theme.colors.base0E; # *magenta
[ config.theme.colors.base0D config.theme.colors.base08 ]; };
# - *blue crumbs = {
# - *red fgColor = config.theme.colors.base06;
}; bgColor = config.theme.colors.base01;
table = { activeColor = config.theme.colors.base03;
# List of resources };
fgColor = config.theme.colors.base06; status = {
bgColor = config.theme.colors.base00; newColor = config.theme.colors.base04; # *cyan
modifyColor = config.theme.colors.base0D; # *blue
# Row selection addColor = config.theme.colors.base0B; # *green
cursorFgColor = config.theme.colors.base07; errorColor = config.theme.colors.base08; # *red
cursorBgColor = config.theme.colors.base01; highlightColor = config.theme.colors.base09; # *orange
killColor = config.theme.colors.base03; # *comment
# Header row completedColor = config.theme.colors.base03; # *comment
header = { };
fgColor = config.theme.colors.base0D; title = {
bgColor = config.theme.colors.base00; fgColor = config.theme.colors.base06;
sorterColor = config.theme.colors.base0A; # *selection bgColor = "default";
highlightColor = config.theme.colors.base09; # *orange
counterColor = config.theme.colors.base0D; # *blue
filterColor = config.theme.colors.base0E; # *magenta
}; };
}; };
xray = { views = {
fgColor = config.theme.colors.base06; charts = {
bgColor = config.theme.colors.base00; bgColor = "default";
cursorColor = config.theme.colors.base06; defaultDialColors =
graphicColor = config.theme.colors.base0D; [ config.theme.colors.base0D config.theme.colors.base08 ];
showIcons = false; # - *blue
}; # - *red
yaml = { defaultChartColors =
keyColor = config.theme.colors.base0D; [ config.theme.colors.base0D config.theme.colors.base08 ];
colonColor = config.theme.colors.base04; # - *blue
fgColor = config.theme.colors.base03; # - *red
}; };
logs = { table = {
fgColor = config.theme.colors.base06; # List of resources
bgColor = config.theme.colors.base00;
indicator = {
fgColor = config.theme.colors.base06; fgColor = config.theme.colors.base06;
bgColor = config.theme.colors.base00; bgColor = "default";
# Row selection
cursorFgColor = config.theme.colors.base07;
cursorBgColor = config.theme.colors.base01;
# Header row
header = {
fgColor = config.theme.colors.base0D;
bgColor = "default";
sorterColor = config.theme.colors.base0A; # *selection
};
};
xray = {
fgColor = config.theme.colors.base06;
bgColor = "default";
cursorColor = config.theme.colors.base06;
graphicColor = config.theme.colors.base0D;
showIcons = false;
};
yaml = {
keyColor = config.theme.colors.base0D;
colonColor = config.theme.colors.base04;
fgColor = config.theme.colors.base03;
};
logs = {
fgColor = config.theme.colors.base06;
bgColor = "default";
indicator = {
fgColor = config.theme.colors.base06;
bgColor = "default";
};
}; };
}; };
}; };

View File

@ -0,0 +1,17 @@
{ config, pkgs, lib, ... }: {
options.rust.enable = lib.mkEnableOption "Rust programming language.";
config = lib.mkIf config.rust.enable {
home-manager.users.${config.user} = {
programs.fish.shellAbbrs = { ca = "cargo"; };
home.packages = with pkgs; [ cargo rustc clippy gcc ];
};
};
}

View File

@ -3,6 +3,7 @@
options.terraform.enable = lib.mkEnableOption "Terraform tools."; options.terraform.enable = lib.mkEnableOption "Terraform tools.";
config = lib.mkIf config.terraform.enable { config = lib.mkIf config.terraform.enable {
unfreePackages = [ "terraform" ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
programs.fish.shellAbbrs = { programs.fish.shellAbbrs = {

View File

@ -0,0 +1,39 @@
{ config, lib, ... }: {
# Shell history sync
options.atuin.enable = lib.mkEnableOption "Atuin";
config = {
home-manager.users.${config.user} = lib.mkIf config.atuin.enable {
programs.atuin = {
enable = true;
flags = [ "--disable-up-arrow" "--disable-ctrl-r" ];
settings = {
auto_sync = true;
update_check = false;
sync_address = "https://api.atuin.sh";
search_mode = "fuzzy";
filter_mode = "host"; # global, host, session, directory
search_mode_shell_up_key_binding = "fuzzy";
filter_mode_shell_up_key_binding = "session";
style = "compact"; # or auto,full
show_help = true;
history_filter = [ ];
secrets_filter = true;
enter_accept = false;
keymap_mode = "vim-normal";
};
};
};
# Give root user the same setup
home-manager.users.root.programs.atuin =
config.home-manager.users.${config.user}.programs.atuin;
};
}

View File

@ -31,6 +31,10 @@ STATUS=$?
# because tesseract adds .txt to the given file path anyways. So if we were to # because tesseract adds .txt to the given file path anyways. So if we were to
# specify /tmp/ocr.txt as the file path, tesseract would out the text to # specify /tmp/ocr.txt as the file path, tesseract would out the text to
# /tmp/ocr.txt.txt # /tmp/ocr.txt.txt
cd /tmp || {
echo "Failed to jump to directory."
exit 1
}
tesseract "$IMAGE_FILE" "${TEXT_FILE//\.txt/}" tesseract "$IMAGE_FILE" "${TEXT_FILE//\.txt/}"
# Check if the text was detected by checking number # Check if the text was detected by checking number

View File

@ -10,6 +10,7 @@
glow # Markdown previews glow # Markdown previews
skate # Key-value store skate # Key-value store
charm # Manage account and filesystem charm # Manage account and filesystem
pop # Send emails from a TUI
]; ];
}; };

View File

@ -1,5 +1,6 @@
{ ... }: { { ... }: {
imports = [ imports = [
./atuin.nix
./bash ./bash
./charm.nix ./charm.nix
./direnv.nix ./direnv.nix
@ -11,5 +12,6 @@
./nixpkgs.nix ./nixpkgs.nix
./starship.nix ./starship.nix
./utilities.nix ./utilities.nix
./work.nix
]; ];
} }

View File

@ -7,6 +7,22 @@
config = { whitelist = { prefix = [ config.dotfilesPath ]; }; }; config = { whitelist = { prefix = [ config.dotfilesPath ]; }; };
}; };
# programs.direnv.direnvrcExtra = ''
# layout_postgres() {
# export PGDATA="$(direnv_layout_dir)/postgres"
# export PGHOST="$PGDATA"
#
# if [[ ! -d "PGDATA" ]]; then
# initdb
# cat >> "$PGDATA/postgres.conf" <<- EOF
# listen_addresses = '''
# unix_socket_directories = '$PGHOST'
# EOF
# echo "CREATE DATABASE $USER;" | postgres --single -E postgres
# fi
# }
# '';
# Prevent garbage collection # Prevent garbage collection
nix.extraOptions = '' nix.extraOptions = ''
keep-outputs = true keep-outputs = true

View File

@ -6,7 +6,7 @@
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
# Packages used in abbreviations and aliases # Packages used in abbreviations and aliases
home.packages = with pkgs; [ curl exa ]; home.packages = with pkgs; [ curl ];
programs.fish = { programs.fish = {
enable = true; enable = true;
@ -15,8 +15,8 @@
# Version of bash which works much better on the terminal # Version of bash which works much better on the terminal
bash = "${pkgs.bashInteractive}/bin/bash"; bash = "${pkgs.bashInteractive}/bin/bash";
# Use exa instead of ls for fancier output # Use eza (exa) instead of ls for fancier output
ls = "exa --group"; ls = "${pkgs.eza}/bin/eza --group";
# Move files to XDG trash on the commandline # Move files to XDG trash on the commandline
trash = lib.mkIf pkgs.stdenv.isLinux "${pkgs.trash-cli}/bin/trash-put"; trash = lib.mkIf pkgs.stdenv.isLinux "${pkgs.trash-cli}/bin/trash-put";
@ -123,9 +123,6 @@
dr = "docker run --rm -it"; dr = "docker run --rm -it";
db = "docker build . -t"; db = "docker build . -t";
# Rust
ca = "cargo";
}; };
shellInit = ""; shellInit = "";
}; };

View File

@ -18,3 +18,5 @@ bind -M insert \cn 'commandline -r "nix shell nixpkgs#"'
bind -M default \cn 'commandline -r "nix shell nixpkgs#"' bind -M default \cn 'commandline -r "nix shell nixpkgs#"'
bind -M insert \x11F nix-fzf bind -M insert \x11F nix-fzf
bind -M default \x11F nix-fzf bind -M default \x11F nix-fzf
bind -M insert \ch '_atuin_search --filter-mode global'
bind -M default \ch '_atuin_search --filter-mode global'

View File

@ -1,4 +1,4 @@
{ config, ... }: { { config, pkgs, ... }: {
# FZF is a fuzzy-finder for the terminal # FZF is a fuzzy-finder for the terminal
@ -16,10 +16,9 @@
--search-path $HOME/dev \ --search-path $HOME/dev \
--type directory \ --type directory \
--exact-depth 2 \ --exact-depth 2 \
| ${pkgs.proximity-sort}/bin/proximity-sort $PWD \
| sed 's/\\/$//' \ | sed 's/\\/$//' \
| fzf \ | fzf --tiebreak=index \
--delimiter '/' \
--with-nth 6.. \
) )
and cd $projdir and cd $projdir
and commandline -f execute and commandline -f execute

View File

@ -28,15 +28,32 @@ in {
userName = config.gitName; userName = config.gitName;
userEmail = config.gitEmail; userEmail = config.gitEmail;
extraConfig = { extraConfig = {
core.pager =
"${pkgs.git}/share/git/contrib/diff-highlight/diff-highlight | less -F";
interactive.difffilter =
"${pkgs.git}/share/git/contrib/diff-highlight/diff-highlight";
pager = { branch = "false"; }; pager = { branch = "false"; };
safe = { directory = config.dotfilesPath; }; safe = { directory = config.dotfilesPath; };
pull = { ff = "only"; }; pull = { ff = "only"; };
push = { autoSetupRemote = "true"; }; push = { autoSetupRemote = "true"; };
init = { defaultBranch = "master"; }; init = { defaultBranch = "master"; };
rebase = { autosquash = "true"; };
}; };
ignores = [ ".direnv/**" "result" ]; ignores = [ ".direnv/**" "result" ];
includes = [{
path = "~/.config/git/personal";
condition = "gitdir:~/dev/personal/";
}];
}; };
# Personal git config
# TODO: fix with variables
xdg.configFile."git/personal".text = ''
[user]
name = "${config.fullName}"
email = "7386960+nmasur@users.noreply.github.com"
'';
programs.fish.shellAbbrs = { programs.fish.shellAbbrs = {
g = "git"; g = "git";
gs = "git status"; gs = "git status";
@ -58,6 +75,7 @@ in {
git switch (git symbolic-ref refs/remotes/origin/HEAD | cut -d"/" -f4)''; git switch (git symbolic-ref refs/remotes/origin/HEAD | cut -d"/" -f4)'';
gcob = "git switch -c"; gcob = "git switch -c";
gb = "git branch"; gb = "git branch";
gpd = "git push origin -d";
gbd = "git branch -d"; gbd = "git branch -d";
gbD = "git branch -D"; gbD = "git branch -D";
gr = "git reset"; gr = "git reset";

View File

@ -7,6 +7,7 @@
enable = true; enable = true;
gitCredentialHelper.enable = true; gitCredentialHelper.enable = true;
settings.git_protocol = "https"; settings.git_protocol = "https";
extensions = [ pkgs.gh-collaborators ];
}; };
programs.fish = programs.fish =
@ -14,7 +15,7 @@
shellAbbrs = { shellAbbrs = {
ghr = "gh repo view -w"; ghr = "gh repo view -w";
gha = gha =
"gh run list | head -1 | awk '{ print $(NF-2) }' | xargs gh run view"; "gh run list | head -1 | awk '{ print \\$\\(NF-2\\) }' | xargs gh run view";
grw = "gh run watch"; grw = "gh run watch";
grf = "gh run view --log-failed"; grf = "gh run view --log-failed";
grl = "gh run view --log"; grl = "gh run view --log";
@ -47,7 +48,7 @@
esac esac
selected=$(gh repo list "$organization" \ selected=$(gh repo list "$organization" \
--limit 50 \ --limit 100 \
--no-archived \ --no-archived \
--json=name,description,isPrivate,updatedAt,primaryLanguage \ --json=name,description,isPrivate,updatedAt,primaryLanguage \
| jq -r '.[] | .name + "," + if .description == "" then "-" else .description |= gsub(","; " ") | .description end + "," + .updatedAt + "," + .primaryLanguage.name' \ | jq -r '.[] | .name + "," + if .description == "" then "-" else .description |= gsub(","; " ") | .description end + "," + .updatedAt + "," + .primaryLanguage.name' \
@ -56,6 +57,7 @@
| fzf \ | fzf \
--header-lines=1 \ --header-lines=1 \
--layout=reverse \ --layout=reverse \
--height=100% \
--bind "ctrl-o:execute:gh repo view -w ''${organization}/{1}" \ --bind "ctrl-o:execute:gh repo view -w ''${organization}/{1}" \
--bind "shift-up:preview-half-page-up" \ --bind "shift-up:preview-half-page-up" \
--bind "shift-down:preview-half-page-down" \ --bind "shift-down:preview-half-page-down" \

View File

@ -4,7 +4,6 @@
home-manager.users.${config.user}.programs.jujutsu = { home-manager.users.${config.user}.programs.jujutsu = {
enable = true; enable = true;
enableFishIntegration = true;
# https://github.com/martinvonz/jj/blob/main/docs/config.md # https://github.com/martinvonz/jj/blob/main/docs/config.md
settings = { settings = {

View File

@ -1,4 +1,4 @@
{ config, pkgs, ... }: { { config, pkgs, lib, ... }: {
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
programs.fish = { programs.fish = {
@ -60,6 +60,24 @@
enableFishIntegration = true; enableFishIntegration = true;
}; };
# Create nix-index if doesn't exist
home.activation.createNixIndex =
let cacheDir = "${config.homePath}/.cache/nix-index";
in lib.mkIf
config.home-manager.users.${config.user}.programs.nix-index.enable
(config.home-manager.users.${config.user}.lib.dag.entryAfter
[ "writeBoundary" ] ''
if [ ! -d ${cacheDir} ]; then
$DRY_RUN_CMD ${pkgs.nix-index}/bin/nix-index -f ${pkgs.path}
fi
'');
# Set automatic generation cleanup for home-manager
nix.gc = {
automatic = config.nix.gc.automatic;
options = config.nix.gc.options;
};
}; };
nix = { nix = {
@ -76,6 +94,34 @@
# For security, only allow specific users # For security, only allow specific users
settings.allowed-users = [ "@wheel" config.user ]; settings.allowed-users = [ "@wheel" config.user ];
# Enable features in Nix commands
extraOptions = ''
experimental-features = nix-command flakes
warn-dirty = false
'';
gc = {
automatic = true;
options = "--delete-older-than 10d";
};
settings = {
# Add community Cachix to binary cache
# Don't use with macOS because blocked by corporate firewall
builders-use-substitutes = true;
substituters =
lib.mkIf (!pkgs.stdenv.isDarwin) [ "https://nix-community.cachix.org" ];
trusted-public-keys = lib.mkIf (!pkgs.stdenv.isDarwin) [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
# Scans and hard links identical files in the store
# Not working with macOS: https://github.com/NixOS/nix/issues/7273
auto-optimise-store = lib.mkIf (!pkgs.stdenv.isDarwin) true;
};
}; };
} }

View File

@ -13,7 +13,7 @@
"$cmd_duration" "$cmd_duration"
"$character" "$character"
]; ];
# right_format = "$nix_shell"; right_format = "$nix_shell";
character = { character = {
success_symbol = "[](bold green)"; success_symbol = "[](bold green)";
error_symbol = "[](bold red)"; error_symbol = "[](bold red)";

View File

@ -20,15 +20,21 @@ in {
home.packages = with pkgs; [ home.packages = with pkgs; [
age # Encryption age # Encryption
bc # Calculator bc # Calculator
delta # Fancy diffs
difftastic # Other fancy diffs
dig # DNS lookup dig # DNS lookup
fd # find fd # find
htop # Show system processes htop # Show system processes
killall # Force quit killall # Force quit
inetutils # Includes telnet, whois inetutils # Includes telnet, whois
jless # JSON viewer
jo # JSON output
jq # JSON manipulation jq # JSON manipulation
lf # File viewer lf # File viewer
qrencode # Generate qr codes qrencode # Generate qr codes
rsync # Copy folders rsync # Copy folders
ren # Rename files
# rep # Replace text in files
ripgrep # grep ripgrep # grep
sd # sed sd # sed
tealdeer # Cheatsheets tealdeer # Cheatsheets
@ -44,10 +50,11 @@ in {
home.file = { home.file = {
".rgignore".text = ignorePatterns; ".rgignore".text = ignorePatterns;
".fdignore".text = ignorePatterns;
".digrc".text = "+noall +answer"; # Cleaner dig commands ".digrc".text = "+noall +answer"; # Cleaner dig commands
}; };
xdg.configFile."fd/ignore".text = ignorePatterns;
programs.bat = { programs.bat = {
enable = true; # cat replacement enable = true; # cat replacement
config = { config = {

View File

@ -0,0 +1,42 @@
{ config, pkgs, lib, ... }:
{
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
home.packages = let
ldap_scheme = "ldaps";
magic_number = "2";
magic_end_seq = "corp";
magic_prefix = "take";
ldap_host =
"${magic_prefix}${magic_number}.t${magic_number}.${magic_end_seq}";
ldap_port = 636;
ldap_dc_1 = "${magic_prefix}${magic_number}";
ldap_dc_2 = "t${magic_number}";
ldap_dc_3 = magic_end_seq;
ldap_script = pkgs.writeShellScriptBin "ldap" ''
SEARCH_FILTER="$@"
ldapsearch -LLL \
-B -o ldif-wrap=no \
-H "${ldap_scheme}://${ldap_host}:${builtins.toString ldap_port}" \
-D "${pkgs.lib.toUpper magic_prefix}${magic_number}\\${
pkgs.lib.toLower config.user
}" \
-w "$(${pkgs._1password}/bin/op item get T${magic_number} --fields label=password)" \
-b "DC=${ldap_dc_1},DC=${ldap_dc_2},DC=${ldap_dc_3}" \
-s "sub" -x "(cn=$SEARCH_FILTER)" \
| jq --slurp \
--raw-input 'split("\n\n")|map(split("\n")|map(select(.[0:1]!="#" and length>0)) |select(length > 0)|map(capture("^(?<key>[^:]*:?): *(?<value>.*)") |if .key[-1:.key|length] == ":" then .key=.key[0:-1]|.value=(.value|@base64d) else . end)| group_by(.key) | map({key:.[0].key,value:(if .|length > 1 then [.[].value] else .[].value end)}) | from_entries)' | jq -r 'del(.[].thumbnailPhoto)'
'';
ldapm_script = pkgs.writeShellScriptBin "ldapm" ''
${ldap_script}/bin/ldap "$@" | jq '[ .[].memberOf] | add'
'';
ldapg_script = pkgs.writeShellScriptBin "ldapg" ''
${ldap_script}/bin/ldap "$@" | jq '[ .[].member] | add'
'';
in [ ldap_script ldapm_script ldapg_script ];
};
}

View File

@ -16,6 +16,7 @@
firefox = "${pkgs.firefox-bin}/Applications/Firefox.app"; firefox = "${pkgs.firefox-bin}/Applications/Firefox.app";
discord = "${pkgs.discord}/Applications/Discord.app"; discord = "${pkgs.discord}/Applications/Discord.app";
kitty = "${pkgs.kitty}/Applications/kitty.app"; kitty = "${pkgs.kitty}/Applications/kitty.app";
obsidian = "${pkgs.obsidian}/Applications/Obsidian.app";
slack = "${pkgs.slack}/Applications/Slack.app"; slack = "${pkgs.slack}/Applications/Slack.app";
}; };
xdg.configFile."hammerspoon/Spoons/MoveWindow.spoon".source = xdg.configFile."hammerspoon/Spoons/MoveWindow.spoon".source =
@ -24,9 +25,9 @@
home.activation.reloadHammerspoon = home.activation.reloadHammerspoon =
config.home-manager.users.${config.user}.lib.dag.entryAfter config.home-manager.users.${config.user}.lib.dag.entryAfter
[ "writeBoundary" ] '' [ "writeBoundary" ] ''
$DRY_RUN_CMD /usr/local/bin/hs -c "hs.reload()" $DRY_RUN_CMD /Applications/Hammerspoon.app/Contents/Frameworks/hs/hs -c "hs.reload()"
$DRY_RUN_CMD sleep 1 $DRY_RUN_CMD sleep 1
$DRY_RUN_CMD /usr/local/bin/hs -c "hs.console.clearConsole()" $DRY_RUN_CMD /Applications/Hammerspoon.app/Contents/Frameworks/hs/hs -c "hs.console.clearConsole()"
''; '';
}; };

View File

@ -8,10 +8,10 @@ obj.name = "Launcher"
obj.version = "0.1" obj.version = "0.1"
obj.license = "MIT - https://opensource.org/licenses/MIT" obj.license = "MIT - https://opensource.org/licenses/MIT"
local width = hs.screen.mainScreen():fullFrame().w local screen = hs.screen.primaryScreen()
local switcherWidth = 500 local switcherWidth = 500
obj.canvas = hs.canvas.new({ obj.canvas = hs.canvas.new({
x = width / 2 - switcherWidth / 2, x = (screen:fullFrame().x + screen:fullFrame().w) / 2 - switcherWidth / 2,
y = 1, y = 1,
h = 3, h = 3,
w = switcherWidth, w = switcherWidth,
@ -54,14 +54,19 @@ function obj:init()
end) end)
-- Launcher shortcuts -- Launcher shortcuts
self.launcher:bind("ctrl", "space", function() self.launcher:bind("ctrl", "space", function() end)
end)
self.launcher:bind("", "return", function() self.launcher:bind("", "return", function()
self:switch("@kitty@") self:switch("@kitty@")
end) end)
self.launcher:bind("", "C", function() self.launcher:bind("", "C", function()
self:switch("Calendar.app") self:switch("Calendar.app")
end) end)
self.launcher:bind("shift", "D", function()
hs.execute("launchctl remove com.paloaltonetworks.gp.pangps")
hs.execute("launchctl remove com.paloaltonetworks.gp.pangpa")
hs.alert.show("Disconnected from GlobalProtect", nil, nil, 4)
self.launcher:exit()
end)
self.launcher:bind("", "E", function() self.launcher:bind("", "E", function()
self:switch("Mail.app") self:switch("Mail.app")
end) end)
@ -75,11 +80,17 @@ function obj:init()
self:switch("Messages.app") self:switch("Messages.app")
end) end)
self.launcher:bind("", "O", function() self.launcher:bind("", "O", function()
self:switch("Obsidian.app") self:switch("@obsidian@")
end) end)
self.launcher:bind("", "P", function() self.launcher:bind("", "P", function()
self:switch("System Preferences.app") self:switch("System Preferences.app")
end) end)
self.launcher:bind("shift", "P", function()
hs.execute("launchctl load /Library/LaunchAgents/com.paloaltonetworks.gp.pangps.plist")
hs.execute("launchctl load /Library/LaunchAgents/com.paloaltonetworks.gp.pangpa.plist")
hs.alert.show("Reconnecting to GlobalProtect", nil, nil, 4)
self.launcher:exit()
end)
self.launcher:bind("", "R", function() self.launcher:bind("", "R", function()
hs.console.clearConsole() hs.console.clearConsole()
hs.reload() hs.reload()

View File

@ -9,7 +9,7 @@ obj.version = "0.1"
obj.license = "MIT - https://opensource.org/licenses/MIT" obj.license = "MIT - https://opensource.org/licenses/MIT"
function obj:init() function obj:init()
hs.window.animationDuration = 0 hs.window.animationDuration = 0.1
dofile(hs.spoons.resourcePath("worklayout.lua"))() dofile(hs.spoons.resourcePath("worklayout.lua"))()
-- bind hotkey -- bind hotkey
hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "n", function() hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "n", function()
@ -56,7 +56,7 @@ function obj:init()
local frame = win:frame() local frame = win:frame()
-- maximize if possible -- maximize if possible
local max = win:screen():fullFrame() local max = win:screen():fullFrame()
frame.x = max.w / 2 frame.x = (max.x * 2 + max.w) / 2
frame.y = max.y frame.y = max.y
frame.w = max.w / 2 frame.w = max.w / 2
frame.h = max.h frame.h = max.h

View File

@ -51,10 +51,20 @@ local function worklayout()
local laptop = { local laptop = {
{ "Firefox", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true }, { "Firefox", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true },
{ "Obsidian", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true }, { "Obsidian", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true },
{ "Calendar", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true },
} }
local layout = concat(left, right, laptop) local layout = concat(left, right, laptop)
hs.layout.apply(layout) hs.layout.apply(layout)
end) end)
-- Reload Hammerspoon whenever layout changes
hs.screen.watcher.new(function()
-- Pause for 5 seconds to give time for layout to change
hs.timer.doAfter(5, function()
-- Perform the actual reload
hs.reload()
end)
end)
end end
return worklayout return worklayout

View File

@ -1,5 +1,5 @@
hs.ipc.cliInstall() -- Install Hammerspoon CLI program
hs.loadSpoon("ControlEscape"):start() -- Load Hammerspoon bits from https://github.com/jasonrudolph/ControlEscape.spoon hs.loadSpoon("ControlEscape"):start() -- Load Hammerspoon bits from https://github.com/jasonrudolph/ControlEscape.spoon
hs.loadSpoon("Launcher"):init() hs.loadSpoon("Launcher"):init()
hs.loadSpoon("DismissAlerts"):init() hs.loadSpoon("DismissAlerts"):init()
hs.loadSpoon("MoveWindow"):init() hs.loadSpoon("MoveWindow"):init()
hs.ipc.cliInstall() -- Install Hammerspoon CLI program

View File

@ -8,11 +8,15 @@
if ! xcode-select --version 2>/dev/null; then if ! xcode-select --version 2>/dev/null; then
$DRY_RUN_CMD xcode-select --install $DRY_RUN_CMD xcode-select --install
fi fi
if ! /usr/local/bin/brew --version 2>/dev/null; then if ! /opt/homebrew/bin/brew --version 2>/dev/null; then
$DRY_RUN_CMD /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $DRY_RUN_CMD /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi fi
''; '';
# Add homebrew paths to CLI path
home-manager.users.${config.user}.home.sessionPath =
[ "/opt/homebrew/bin/" ];
homebrew = { homebrew = {
enable = true; enable = true;
onActivation = { onActivation = {
@ -24,24 +28,19 @@
brewfile = true; # Run brew bundle from anywhere brewfile = true; # Run brew bundle from anywhere
lockfiles = false; # Don't save lockfile (since running from anywhere) lockfiles = false; # Don't save lockfile (since running from anywhere)
}; };
taps = [
"homebrew/cask" # Required for casks
"homebrew/cask-drivers" # Used for Logitech G-Hub
];
brews = [ brews = [
"trash" # Delete files and folders to trash instead of rm "trash" # Delete files and folders to trash instead of rm
"openjdk" # Required by Apache Directory Studio
]; ];
casks = [ casks = [
"1password" # 1Password packaging on Nix is broken for macOS "1password" # 1Password will not launch from Nix on macOS
"apache-directory-studio" # Packaging on Nix is not available for macOS # "gitify" # Git notifications in menu bar (downgrade manually from 4.6.1)
"gitify" # Git notifications in menu bar
"keybase" # GUI on Nix not available for macOS "keybase" # GUI on Nix not available for macOS
"logitech-g-hub" # Mouse and keyboard management # "logitech-g-hub" # Mouse and keyboard management
"logitune" # Logitech webcam firmware
"meetingbar" # Show meetings in menu bar "meetingbar" # Show meetings in menu bar
"obsidian" # Obsidian packaging on Nix is not available for macOS
"scroll-reverser" # Different scroll style for mouse vs. trackpad "scroll-reverser" # Different scroll style for mouse vs. trackpad
"steam" # Not packaged for Nix # "steam" # Not packaged for Nix
# "epic-games" # Not packaged for Nix
]; ];
}; };

View File

@ -3,7 +3,6 @@
# MacOS-specific settings for Kitty # MacOS-specific settings for Kitty
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin { home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
programs.kitty = { programs.kitty = {
darwinLaunchOptions = [ "--start-as=fullscreen" ];
font.size = lib.mkForce 20; font.size = lib.mkForce 20;
settings = { settings = {
shell = "/run/current-system/sw/bin/fish"; shell = "/run/current-system/sw/bin/fish";

View File

@ -2,7 +2,7 @@
config = lib.mkIf pkgs.stdenv.isDarwin { config = lib.mkIf pkgs.stdenv.isDarwin {
networking = { networking = {
computerName = "${config.fullName}'\\''s Mac"; computerName = config.networking.hostName;
# Adjust if necessary # Adjust if necessary
# hostName = ""; # hostName = "";
}; };

View File

@ -1,4 +1,4 @@
{ pkgs, lib, ... }: { { config, pkgs, lib, ... }: {
config = lib.mkIf pkgs.stdenv.isDarwin { config = lib.mkIf pkgs.stdenv.isDarwin {
@ -34,8 +34,8 @@
# Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs) # Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs)
AppleKeyboardUIMode = 3; AppleKeyboardUIMode = 3;
# Automatically show and hide the menu bar # Only hide menu bar in fullscreen
_HIHideMenuBar = true; _HIHideMenuBar = false;
# Expand save panel by default # Expand save panel by default
NSNavPanelExpandedStateForSaveMode = true; NSNavPanelExpandedStateForSaveMode = true;
@ -112,77 +112,96 @@
# Disable trackpad tap to click # Disable trackpad tap to click
trackpad.Clicking = false; trackpad.Clicking = false;
# universalaccess = {
# # Zoom in with Control + Scroll Wheel
# closeViewScrollWheelToggle = true;
# closeViewZoomFollowsFocus = true;
# };
# Where to save screenshots # Where to save screenshots
screencapture.location = "~/Downloads"; screencapture.location = "~/Downloads";
CustomUserPreferences = {
# Disable disk image verification
"com.apple.frameworks.diskimages" = {
skip-verify = true;
skip-verify-locked = true;
skip-verify-remote = true;
};
# Avoid creating .DS_Store files on network or USB volumes
"com.apple.desktopservices" = {
DSDontWriteNetworkStores = true;
DSDontWriteUSBStores = true;
};
"com.apple.dock" = {
magnification = true;
largesize = 48;
persistent-apps = [
"/Applications/1Password.app"
"${pkgs.slack}/Applications/Slack.app"
"/System/Applications/Calendar.app"
"${pkgs.firefox-bin}/Applications/Firefox.app"
"/System/Applications/Messages.app"
"/System/Applications/Mail.app"
"/Applications/zoom.us.app"
"${pkgs.discord}/Applications/Discord.app"
"${pkgs.obsidian}/Applications/Obsidian.app"
"${pkgs.kitty}/Applications/kitty.app"
"/System/Applications/System Settings.app"
];
};
# Require password immediately after screen saver begins
"com.apple.screensaver" = {
askForPassword = 1;
askForPasswordDelay = 0;
};
"com.apple.finder" = {
# Disable the warning before emptying the Trash
WarnOnEmptyTrash = false;
# Finder search in current folder by default
FXDefaultSearchScope = "SCcf";
# Default Finder window set to column view
FXPreferredViewStyle = "clmv";
};
"leits.MeetingBar" = {
eventTimeFormat = ''"show"'';
eventTitleFormat = ''"none"'';
eventTitleIconFormat = ''"iconCalendar"'';
slackBrowser =
''{"deletable":true,"arguments":"","name":"Slack","path":""}'';
zoomBrowser =
''{"deletable":true,"arguments":"","name":"Zoom","path":""}'';
KeyboardShortcuts_joinEventShortcut =
''{"carbonModifiers":6400,"carbonKeyCode":38}'';
timeFormat = ''"12-hour"'';
};
};
CustomSystemPreferences = {
};
}; };
# Settings that don't have an option in nix-darwin # Settings that don't have an option in nix-darwin
activationScripts.postActivation.text = '' activationScripts.postActivation.text = ''
echo "Disable disk image verification"
defaults write com.apple.frameworks.diskimages skip-verify -bool true
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
echo "Avoid creating .DS_Store files on network volumes"
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
echo "Disable the warning before emptying the Trash"
defaults write com.apple.finder WarnOnEmptyTrash -bool false
echo "Require password immediately after sleep or screen saver begins"
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
echo "Allow apps from anywhere" echo "Allow apps from anywhere"
SPCTL=$(spctl --status) SPCTL=$(spctl --status)
if ! [ "$SPCTL" = "assessments disabled" ]; then if ! [ "$SPCTL" = "assessments disabled" ]; then
sudo spctl --master-disable sudo spctl --master-disable
fi fi
''; '';
# User-level settings # User-level settings
activationScripts.postUserActivation.text = '' activationScripts.postUserActivation.text = let
persistentApps = lib.concatMapStrings (x: ''"'' + x + ''" '')
config.system.defaults.CustomUserPreferences."com.apple.dock".persistent-apps;
in ''
echo "Show the ~/Library folder" echo "Show the ~/Library folder"
chflags nohidden ~/Library chflags nohidden ~/Library
echo "Enable dock magnification"
defaults write com.apple.dock magnification -bool true
echo "Set dock magnification size"
defaults write com.apple.dock largesize -int 48
echo "Define dock icon function"
__dock_item() {
printf "%s%s%s%s%s" \
"<dict><key>tile-data</key><dict><key>file-data</key><dict>" \
"<key>_CFURLString</key><string>" \
"$1" \
"</string><key>_CFURLStringType</key><integer>0</integer>" \
"</dict></dict></dict>"
}
echo "Choose and order dock icons" echo "Choose and order dock icons"
defaults write com.apple.dock persistent-apps -array \ defaults write com.apple.dock persistent-apps -array ${persistentApps}
"$(__dock_item /Applications/1Password.app)" \
"$(__dock_item ${pkgs.slack}/Applications/Slack.app)" \ echo "Reduce Menu Bar padding"
"$(__dock_item /System/Applications/Calendar.app)" \ defaults write -globalDomain NSStatusItemSelectionPadding -int 6
"$(__dock_item ${pkgs.firefox-bin}/Applications/Firefox.app)" \ defaults write -globalDomain NSStatusItemSpacing -int 6
"$(__dock_item /System/Applications/Messages.app)" \
"$(__dock_item /System/Applications/Mail.app)" \
"$(__dock_item /Applications/zoom.us.app)" \
"$(__dock_item ${pkgs.discord}/Applications/Discord.app)" \
"$(__dock_item /Applications/Obsidian.app)" \
"$(__dock_item ${pkgs.kitty}/Applications/kitty.app)" \
"$(__dock_item /System/Applications/System\ Settings.app)"
''; '';
}; };

View File

@ -9,13 +9,19 @@
}; };
# Used for aerc
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
home.sessionVariables = {
XDG_CONFIG_HOME = "${config.homePath}/.config"; # Default shell setting doesn't work
}; home.sessionVariables = { SHELL = "${pkgs.fish}/bin/fish"; };
# Used for aerc
xdg.enable = true;
}; };
# Fix for: 'Error: HOME is set to "/var/root" but we expect "/var/empty"'
home-manager.users.root.home.homeDirectory = lib.mkForce "/var/root";
}; };
} }

View File

@ -2,20 +2,24 @@
{ {
unfreePackages = [ "consul" "vault-bin" ];
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin { home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
home.packages = with pkgs; [ home.packages = with pkgs; [
# visidata # CSV inspector visidata # CSV inspector
dos2unix # Convert Windows text files dos2unix # Convert Windows text files
inetutils # Includes telnet inetutils # Includes telnet
youtube-dl # Convert web videos youtube-dl # Convert web videos
pandoc # Convert text documents pandoc # Convert text documents
mpd # TUI slideshows mpd # TUI slideshows
mpv # Video player
gnupg # Encryption
awscli2 awscli2
ssm-session-manager-plugin
awslogs awslogs
google-cloud-sdk google-cloud-sdk
ansible vault-bin
vault
consul consul
noti # Create notifications programmatically noti # Create notifications programmatically
ipcalc # Make IP network calculations ipcalc # Make IP network calculations

View File

@ -36,23 +36,12 @@
# Set Nautilus as default for opening directories # Set Nautilus as default for opening directories
xdg.mimeApps = { xdg.mimeApps = {
associations.added."inode/directory" = [ "org.gnome.Nautilus.desktop" ]; associations.added."inode/directory" = [ "org.gnome.Nautilus.desktop" ];
# associations.removed = {
# "inode/directory" = [ "kitty-open.desktop" ];
# };
defaultApplications."inode/directory" = defaultApplications."inode/directory" =
lib.mkBefore [ "org.gnome.Nautilus.desktop" ]; lib.mkBefore [ "org.gnome.Nautilus.desktop" ];
}; };
}; };
# # Set default for opening directories
# xdg.mime = {
# addedAssociations."inode/directory" = [ "org.gnome.Nautilus.desktop" ];
# removedAssociations = { "inode/directory" = [ "kitty-open.desktop" ]; };
# defaultApplications."inode/directory" =
# lib.mkForce [ "org.gnome.Nautilus.desktop" ];
# };
# Delete Trash files older than 1 week # Delete Trash files older than 1 week
systemd.user.services.empty-trash = { systemd.user.services.empty-trash = {
description = "Empty Trash on a regular basis"; description = "Empty Trash on a regular basis";

View File

@ -9,6 +9,14 @@
programs.steam = { programs.steam = {
enable = true; enable = true;
remotePlay.openFirewall = true; remotePlay.openFirewall = true;
package = pkgs.steam.override {
# Adapted in part from: https://github.com/Shawn8901/nix-configuration/blob/1c48be94238a9f463cf0bbd1e1842a4454286514/modules/nixos/steam-compat-tools/default.nix
# Based on: https://github.com/NixOS/nixpkgs/issues/73323
extraEnv = {
STEAM_EXTRA_COMPAT_TOOLS_PATHS =
lib.makeBinPath [ pkgs.proton-ge-custom ];
};
};
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@ -5,7 +5,6 @@
./fonts.nix ./fonts.nix
./gtk.nix ./gtk.nix
./i3.nix ./i3.nix
./keybinds.nix
./picom.nix ./picom.nix
./polybar.nix ./polybar.nix
./rofi.nix ./rofi.nix
@ -14,6 +13,14 @@
options = { options = {
launcherCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use for launching";
};
systemdSearch = lib.mkOption {
type = lib.types.str;
description = "Command to use for interacting with systemd";
};
altTabCommand = lib.mkOption { altTabCommand = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Command to use for choosing windows"; description = "Command to use for choosing windows";
@ -30,30 +37,14 @@
type = lib.types.str; type = lib.types.str;
description = "Command to use for quick calculations"; description = "Command to use for quick calculations";
}; };
launcherCommand = lib.mkOption { toggleBarCommand = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Command to use for launching"; description = "Command to hide and show the status bar.";
};
lockScreenCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use to lock the screen";
}; };
powerCommand = lib.mkOption { powerCommand = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Command to use for power options menu"; description = "Command to use for power options menu";
}; };
systemdSearch = lib.mkOption {
type = lib.types.str;
description = "Command to use for interacting with systemd";
};
terminal = lib.mkOption {
type = lib.types.str;
description = "Package to use for graphical terminal";
};
toggleBarCommand = lib.mkOption {
type = lib.types.str;
description = "Command to hide and show the status bar.";
};
wallpaper = lib.mkOption { wallpaper = lib.mkOption {
type = lib.types.path; type = lib.types.path;
description = "Wallpaper background image file"; description = "Wallpaper background image file";

View File

@ -2,22 +2,11 @@
let let
lockCmd =
"${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span";
lockUpdate = lockUpdate =
"${pkgs.betterlockscreen}/bin/betterlockscreen --update ${config.wallpaper} --display 1 --span"; "${pkgs.betterlockscreen}/bin/betterlockscreen --update ${config.wallpaper} --display 1 --span";
workspaces = {
"1" = "1:I";
"2" = "2:II";
"3" = "3:III";
"4" = "4:IV";
"5" = "5:V";
"6" = "6:VI";
"7" = "7:VII";
"8" = "8:VIII";
"9" = "9:IX";
"10" = "10:X";
};
in { in {
config = lib.mkIf pkgs.stdenv.isLinux { config = lib.mkIf pkgs.stdenv.isLinux {
@ -34,18 +23,29 @@ in {
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
xsession.windowManager.i3 = { xsession.windowManager.i3 = {
enable = config.services.xserver.enable; enable = config.services.xserver.enable;
config = let modifier = "Mod4"; # Super key config = let
modifier = "Mod4"; # Super key
ws1 = "1:I";
ws2 = "2:II";
ws3 = "3:III";
ws4 = "4:IV";
ws5 = "5:V";
ws6 = "6:VI";
ws7 = "7:VII";
ws8 = "8:VIII";
ws9 = "9:IX";
ws10 = "10:X";
in { in {
modifier = modifier; modifier = modifier;
assigns = { assigns = {
"${workspaces."1"}" = [{ class = "Firefox"; }]; "${ws1}" = [{ class = "Firefox"; }];
"${workspaces."2"}" = [ "${ws2}" = [
{ class = "kitty"; } { class = "kitty"; }
{ class = "aerc"; } { class = "aerc"; }
{ class = "obsidian"; } { class = "obsidian"; }
]; ];
"${workspaces."3"}" = [{ class = "discord"; }]; "${ws3}" = [{ class = "discord"; }];
"${workspaces."4"}" = [{ class = "Steam"; }]; "${ws4}" = [ { class = "steam"; } { class = "Steam"; } ];
}; };
bars = [{ command = "echo"; }]; # Disable i3bar bars = [{ command = "echo"; }]; # Disable i3bar
colors = let colors = let
@ -91,7 +91,131 @@ in {
newWindow = "urgent"; newWindow = "urgent";
followMouse = false; followMouse = false;
}; };
keybindings = { }; keybindings = {
# Adjust screen brightness
"Shift+F12" =
# Disable dynamic sleep
# https://github.com/rockowitz/ddcutil/issues/323
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 + 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 + 30";
"Shift+F11" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 - 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 - 30";
"XF86MonBrightnessUp" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 + 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 + 30";
"XF86MonBrightnessDown" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 - 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 - 30";
# Media player controls
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
# Launchers
"${modifier}+Return" =
"exec --no-startup-id kitty; workspace ${ws2}; layout tabbed";
"${modifier}+space" =
"exec --no-startup-id ${config.launcherCommand}";
"${modifier}+Shift+s" =
"exec --no-startup-id ${config.systemdSearch}";
"${modifier}+Shift+a" =
"exec --no-startup-id ${config.audioSwitchCommand}";
"Mod1+Tab" = "exec --no-startup-id ${config.altTabCommand}";
"${modifier}+Shift+period" =
"exec --no-startup-id ${config.powerCommand}";
"${modifier}+Shift+m" =
"exec --no-startup-id ${config.brightnessCommand}";
"${modifier}+c" =
"exec --no-startup-id ${config.calculatorCommand}";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+r" = "restart";
"${modifier}+Shift+q" = ''
exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"'';
"${modifier}+Shift+x" = "exec ${lockCmd}";
"${modifier}+Mod1+h" =
"exec --no-startup-id kitty sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
"${modifier}+Mod1+r" =
"exec --no-startup-id kitty sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
# Window options
"${modifier}+q" = "kill";
"${modifier}+b" = "exec ${config.toggleBarCommand}";
"${modifier}+f" = "fullscreen toggle";
"${modifier}+h" = "focus left";
"${modifier}+j" = "focus down";
"${modifier}+k" = "focus up";
"${modifier}+l" = "focus right";
"${modifier}+Left" = "focus left";
"${modifier}+Down" = "focus down";
"${modifier}+Up" = "focus up";
"${modifier}+Right" = "focus right";
"${modifier}+Shift+h" = "move left";
"${modifier}+Shift+j" = "move down";
"${modifier}+Shift+k" = "move up";
"${modifier}+Shift+l" = "move right";
"${modifier}+Shift+Left" = "move left";
"${modifier}+Shift+Down" = "move down";
"${modifier}+Shift+Up" = "move up";
"${modifier}+Shift+Right" = "move right";
# Tiling
"${modifier}+i" = "split h";
"${modifier}+v" = "split v";
"${modifier}+s" = "layout stacking";
"${modifier}+t" = "layout tabbed";
"${modifier}+e" = "layout toggle split";
"${modifier}+Shift+space" = "floating toggle";
"${modifier}+Control+space" = "focus mode_toggle";
"${modifier}+a" = "focus parent";
# Workspaces
"${modifier}+1" = "workspace ${ws1}";
"${modifier}+2" = "workspace ${ws2}";
"${modifier}+3" = "workspace ${ws3}";
"${modifier}+4" = "workspace ${ws4}";
"${modifier}+5" = "workspace ${ws5}";
"${modifier}+6" = "workspace ${ws6}";
"${modifier}+7" = "workspace ${ws7}";
"${modifier}+8" = "workspace ${ws8}";
"${modifier}+9" = "workspace ${ws9}";
"${modifier}+0" = "workspace ${ws10}";
# Move windows
"${modifier}+Shift+1" =
"move container to workspace ${ws1}; workspace ${ws1}";
"${modifier}+Shift+2" =
"move container to workspace ${ws2}; workspace ${ws2}";
"${modifier}+Shift+3" =
"move container to workspace ${ws3}; workspace ${ws3}";
"${modifier}+Shift+4" =
"move container to workspace ${ws4}; workspace ${ws4}";
"${modifier}+Shift+5" =
"move container to workspace ${ws5}; workspace ${ws5}";
"${modifier}+Shift+6" =
"move container to workspace ${ws6}; workspace ${ws6}";
"${modifier}+Shift+7" =
"move container to workspace ${ws7}; workspace ${ws7}";
"${modifier}+Shift+8" =
"move container to workspace ${ws8}; workspace ${ws8}";
"${modifier}+Shift+9" =
"move container to workspace ${ws9}; workspace ${ws9}";
"${modifier}+Shift+0" =
"move container to workspace ${ws10}; workspace ${ws10}";
# Move screens
"${modifier}+Control+l" = "move workspace to output right";
"${modifier}+Control+h" = "move workspace to output left";
# Resizing
"${modifier}+r" = ''mode "resize"'';
"${modifier}+Control+Shift+h" =
"resize shrink width 10 px or 10 ppt";
"${modifier}+Control+Shift+j" =
"resize grow height 10 px or 10 ppt";
"${modifier}+Control+Shift+k" =
"resize shrink height 10 px or 10 ppt";
"${modifier}+Control+Shift+l" = "resize grow width 10 px or 10 ppt";
};
modes = { }; modes = { };
startup = [ startup = [
{ {
@ -100,15 +224,16 @@ in {
notification = false; notification = false;
} }
{ {
command = "i3-msg focus right, workspace ${workspaces."2"}"; command =
"i3-msg workspace ${ws2}, move workspace to output right";
notification = false; notification = false;
} }
{ {
command = "i3-msg focus left, workspace ${workspaces."1"}"; command =
"i3-msg workspace ${ws1}, move workspace to output left";
notification = false; notification = false;
} }
]; ];
terminal = config.terminal;
window = { window = {
border = 0; border = 0;
hideEdgeBorders = "smart"; hideEdgeBorders = "smart";
@ -116,74 +241,22 @@ in {
}; };
workspaceAutoBackAndForth = false; workspaceAutoBackAndForth = false;
workspaceOutputAssign = [ ]; workspaceOutputAssign = [ ];
# gaps = {
# bottom = 8;
# top = 8;
# left = 8;
# right = 8;
# horizontal = 15;
# vertical = 15;
# inner = 15;
# outer = 0;
# smartBorders = "off";
# smartGaps = false;
# };
}; };
extraConfig = ""; extraConfig = "";
}; };
services.sxhkd.keybindings = let
# Shortcuts
i3-msg = "${pkgs.i3}/bin/i3-msg";
in {
# Window navigation
"super + {_,shift +}{h,j,k,l}" =
''${i3-msg} "{focus,move} {left,down,up,right}"'';
"super + {_,shift +}{Left,Down,Up,Right}" =
''${i3-msg} "{focus,move} {left,down,up,right}"'';
"super + q" = ''${i3-msg} "kill"'';
"super + f" = ''${i3-msg} "fullscreen toggle"'';
# Screen management
"super + control + l" = ''${i3-msg} "move workspace to output right"'';
"super + control + h" = ''${i3-msg} "move workspace to output left"'';
# Window layouts and tiling
"super + {i,v}" = ''${i3-msg} "split {h,v}"'';
"super + {s,t,e}" =
''${i3-msg} "layout {stacking,tabbed,toggle split}"'';
"super + shift + space" = ''${i3-msg} "floating toggle"'';
"super + control + space" = ''${i3-msg} "focus mode_toggle"'';
"super + a" = ''${i3-msg} "focus parent"'';
# Launch terminal
"super + Return" = ''
${i3-msg} "exec --no-startup-id ${config.terminal}; workspace ${
workspaces."2"
}; layout tabbed"'';
# Restart and reload
"super + shift + {c,r}" = ''${i3-msg} "{reload,restart}"'';
"super + shift + q" = ''
${pkgs.i3}/bin/i3-nagbar -t warning -m "Exit i3?" -B "Yes, exit i3" "${i3-msg} exit"'';
# Resize
"super + r : {h,j,k,l}" =
''${i3-msg} "resize {shrink,grow} width 10px or 10 ppt"'';
"super + r : {j,k}" =
''${i3-msg} "resize {shrink,grow} height 10px or 10 ppt"'';
} // (
# Bind navigation by number
let
bindWorkspace = num: workspace:
lib.attrsets.nameValuePair ("super + ${num}")
(''${i3-msg} "workspace ${workspace}"'');
in lib.mapAttrs' bindWorkspace workspaces
) // (
# Bind move container to workspace by number
let
bindWorkspace = num: workspace:
lib.attrsets.nameValuePair ("super + shift +${num}") (''
${i3-msg} "move container to workspace ${workspace}; workspace ${workspace}"'');
in lib.mapAttrs' bindWorkspace workspaces
);
programs.fish.functions = { programs.fish.functions = {
update-lock-screen = lib.mkIf config.services.xserver.enable { update-lock-screen = lib.mkIf config.services.xserver.enable {
description = "Update lockscreen with wallpaper"; description = "Update lockscreen with wallpaper";
@ -204,20 +277,17 @@ in {
}; };
lockScreenCommand =
"${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span";
# Ref: https://github.com/betterlockscreen/betterlockscreen/blob/next/system/betterlockscreen%40.service # Ref: https://github.com/betterlockscreen/betterlockscreen/blob/next/system/betterlockscreen%40.service
systemd.services.lock = { systemd.services.lock = {
enable = config.services.xserver.enable; enable = config.services.xserver.enable;
description = "Lock the screen before suspend"; description = "Lock the screen on resume from suspend";
before = [ "sleep.target" "suspend.target" ]; before = [ "sleep.target" "suspend.target" ];
serviceConfig = { serviceConfig = {
User = config.user; User = config.user;
Type = "simple"; Type = "simple";
Environment = "DISPLAY=:0"; Environment = "DISPLAY=:0";
TimeoutSec = "infinity"; TimeoutSec = "infinity";
ExecStart = config.lockScreenCommand; ExecStart = lockCmd;
ExecStartPost = "${pkgs.coreutils-full}/bin/sleep 1"; ExecStartPost = "${pkgs.coreutils-full}/bin/sleep 1";
}; };
wantedBy = [ "sleep.target" "suspend.target" ]; wantedBy = [ "sleep.target" "suspend.target" ];

View File

@ -1,51 +0,0 @@
{ config, pkgs, ... }: {
home-manager.users.${config.user} = {
services.sxhkd = {
enable = true;
keybindings = {
# Adjust screen brightness (TODO: replace with pkgs.light?)
"shift + {F11,F12}" = ''
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 {- 30,+ 30} && sleep 1; \\
${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 {- 30,+ 30}
'';
"XF86MonBrightness{Down,Up}" = ''
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 {- 30,+ 30} && sleep 1; \\
${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 {- 30,+ 30}
'';
# Media controls
"XF86Audio{Play,Stop,Next,Prev}" =
"${pkgs.playerctl}/bin/playerctl {play-pause,stop,next,previous}";
# Toggle bar
"super + b" = config.toggleBarCommand;
# Launchers
"super + space" = config.launcherCommand;
"super + shift + s" = config.systemdSearch;
"super + shift + a" = config.audioSwitchCommand;
"alt + Tab" = config.altTabCommand;
"super + shift + period" = config.powerCommand;
"super + shift + m" = config.brightnessCommand;
"super + c" = config.calculatorCommand;
"super + shift + x" = config.lockScreenCommand;
"super + alt + h" =
"${config.terminal} sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
"super + alt + r" =
"${config.terminal} sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
};
};
xsession.windowManager.i3.config.startup = [{
command = "pkill sxhkd; sxhkd";
always = true;
notification = false;
}];
};
}

View File

@ -1,6 +1,6 @@
{ config, pkgs, lib, ... }: { { config, pkgs, lib, ... }: {
config = lib.mkIf config.services.xserver.enable { config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
services.picom = { services.picom = {

View File

@ -1,6 +1,6 @@
{ config, pkgs, lib, ... }: { { config, pkgs, lib, ... }: {
config = lib.mkIf config.services.xserver.enable { config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
toggleBarCommand = "polybar-msg cmd toggle"; toggleBarCommand = "polybar-msg cmd toggle";
@ -36,7 +36,7 @@
module-margin = 1; module-margin = 1;
modules-left = "i3"; modules-left = "i3";
modules-center = "xwindow"; modules-center = "xwindow";
modules-right = "mailcount network pulseaudio date power"; modules-right = "mailcount network pulseaudio date keyboard power";
cursor-click = "pointer"; cursor-click = "pointer";
cursor-scroll = "ns-resize"; cursor-scroll = "ns-resize";
enable-ipc = true; enable-ipc = true;
@ -141,7 +141,7 @@
format-volume = "<ramp-volume> <label-volume>"; format-volume = "<ramp-volume> <label-volume>";
# format-volume-background = colors.background; # format-volume-background = colors.background;
# label-volume-background = colors.background; # label-volume-background = colors.background;
format-volume-foreground = config.theme.colors.base0B; format-volume-foreground = config.theme.colors.base04;
label-volume = "%percentage%%"; label-volume = "%percentage%%";
label-muted = "󰝟 ---"; label-muted = "󰝟 ---";
label-muted-foreground = config.theme.colors.base03; label-muted-foreground = config.theme.colors.base03;
@ -197,13 +197,20 @@
date = "%d %b %l:%M %p"; date = "%d %b %l:%M %p";
date-alt = "%Y-%m-%d %H:%M:%S"; date-alt = "%Y-%m-%d %H:%M:%S";
label = "%date%"; label = "%date%";
label-foreground = config.theme.colors.base0A; label-foreground = config.theme.colors.base06;
# format-background = colors.background; # format-background = colors.background;
}; };
"module/keyboard" = {
type = "custom/text";
content = "󰌌";
click-left = "doas systemctl restart keyd";
content-foreground = config.theme.colors.base04;
};
"module/power" = { "module/power" = {
type = "custom/text"; type = "custom/text";
content = " "; content = " ";
click-left = config.powerCommand; click-left = config.powerCommand;
click-right = "polybar-msg cmd restart";
content-foreground = config.theme.colors.base04; content-foreground = config.theme.colors.base04;
}; };
"settings" = { "settings" = {

View File

@ -8,10 +8,11 @@ in {
imports = [ ./rofi/power.nix ./rofi/brightness.nix ]; imports = [ ./rofi/power.nix ./rofi/brightness.nix ];
config = lib.mkIf config.services.xserver.enable { config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
# Set the Rofi-Systemd terminal for viewing logs # Set the Rofi-Systemd terminal for viewing logs
environment.sessionVariables.ROFI_SYSTEMD_TERM = config.terminal; environment.sessionVariables.ROFI_SYSTEMD_TERM =
lib.mkIf config.kitty.enable "${pkgs.kitty}/bin/kitty";
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
@ -23,13 +24,6 @@ in {
programs.rofi = { programs.rofi = {
enable = true; enable = true;
cycle = true; cycle = true;
extraConfig = {
show-icons = true;
kb-cancel = "Escape,Super+space";
modi = "window,run,ssh,emoji,calc,systemd";
sort = true;
# levenshtein-sort = true;
};
location = "center"; location = "center";
pass = { }; pass = { };
plugins = [ pkgs.rofi-calc pkgs.rofi-emoji pkgs.rofi-systemd ]; plugins = [ pkgs.rofi-calc pkgs.rofi-emoji pkgs.rofi-systemd ];
@ -65,7 +59,7 @@ in {
border = mkLiteral "0px"; border = mkLiteral "0px";
border-radius = mkLiteral "0px"; border-radius = mkLiteral "0px";
border-color = mkLiteral config.theme.colors.base04; border-color = mkLiteral config.theme.colors.base04;
children = map mkLiteral [ "inputbar" "listview" ]; children = map mkLiteral [ "inputbar" "message" "listview" ];
spacing = mkLiteral "10px"; spacing = mkLiteral "10px";
padding = mkLiteral "10px"; padding = mkLiteral "10px";
}; };
@ -149,9 +143,15 @@ in {
}; };
}; };
terminal = config.terminal;
xoffset = 0; xoffset = 0;
yoffset = -20; yoffset = -20;
extraConfig = {
show-icons = true;
kb-cancel = "Escape,Super+space";
modi = "window,run,ssh,emoji,calc,systemd";
sort = true;
# levenshtein-sort = true;
};
}; };
home.file.".local/share/rofi/themes" = { home.file.".local/share/rofi/themes" = {

7
modules/nixos/graphical/rofi/brightness.nix Normal file → Executable file
View File

@ -28,17 +28,18 @@ in {
-sep ';' \ -sep ';' \
-selected-row 1) -selected-row 1)
case "$chosen" in case "$chosen" in
"$dimmer") "$dimmer")
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 25; ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 25 ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 25; ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 25
;; ;;
"$medium") "$medium")
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 75; ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 75 ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 75; ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 75
;; ;;
"$brighter") "$brighter")
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 100; ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 100 ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 100; ${pkgs.ddcutil}/bin/ddcutil --disable-dynamic-sleep --display 2 setvcp 10 100
;; ;;
*) exit 1 ;; *) exit 1 ;;

12
modules/nixos/graphical/rofi/power.nix Normal file → Executable file
View File

@ -31,15 +31,17 @@ in {
-sep ';' \ -sep ';' \
-selected-row 2) -selected-row 2)
confirm () {
${builtins.readFile ./rofi-prompt.sh}
}
case "$chosen" in case "$chosen" in
"$power_off") "$power_off")
${ confirm 'Shutdown?' && doas shutdown now
builtins.toString ./rofi-prompt.sh
} 'Shutdown?' && doas shutdown now
;; ;;
"$reboot") "$reboot")
${builtins.toString ./rofi-prompt.sh} 'Reboot?' && doas reboot confirm 'Reboot?' && doas reboot
;; ;;
"$lock") "$lock")
@ -51,7 +53,7 @@ in {
;; ;;
"$log_out") "$log_out")
${builtins.toString ./rofi-prompt.sh} 'Logout?' && i3-msg exit confirm 'Logout?' && i3-msg exit
;; ;;
*) exit 1 ;; *) exit 1 ;;

View File

@ -42,6 +42,6 @@ chosen=$(printf '%s;%s\n' "$yes" "$no" |
-selected-row 1) -selected-row 1)
case "$chosen" in case "$chosen" in
"$yes") exit 0 ;; "$yes") return 0 ;;
*) exit 1 ;; *) return 1 ;;
esac esac

View File

@ -1,25 +0,0 @@
{ config, lib, ... }: {
config = lib.mkIf config.gui.enable {
programs.sway = {
enable = true;
package = null; # Use home-manager Sway instead
};
};
home-manager.users.${config.user} = {
wayland.windowManager.sway = {
enable = true;
config =
config.home-manager.users.${config.user}.xsession.windowManager.i3.config;
};
};
# TODO: swaybg
# TODO: swaylock
}

View File

@ -27,7 +27,7 @@
if keystatus --shift ; then if keystatus --shift ; then
set timeout=-1 set timeout=-1
else else
set timeout=0 set timeout=3
fi fi
''; '';
}; };

View File

@ -0,0 +1,19 @@
{ config, lib, modulesPath, ... }:
{
# options.iso.enable = lib.mkEnableOption "Enable creating as an ISO.";
#
# imports = [ "${toString modulesPath}/installer/cd-dvd/iso-image.nix" ];
# config = lib.mkIf config.iso.enable {
#
# # EFI booting
# isoImage.makeEfiBootable = true;
#
# # USB booting
# isoImage.makeUsbBootable = true;
#
# };
}

View File

@ -1,10 +1,10 @@
{ config, ... }: { { config, pkgs, lib, ... }: {
config = { config = lib.mkIf config.physical {
services.xserver = { services.xserver = {
layout = "us"; xkb.layout = "us";
# Keyboard responsiveness # Keyboard responsiveness
autoRepeatDelay = 250; autoRepeatDelay = 250;
@ -23,6 +23,10 @@
}; };
}; };
# For some reason, keyd doesn't restart properly when updating
system.activationScripts.keyd.text =
"${pkgs.systemd}/bin/systemctl restart keyd.service";
# Enable num lock on login # Enable num lock on login
home-manager.users.${config.user}.xsession.numlock.enable = true; home-manager.users.${config.user}.xsession.numlock.enable = true;

View File

@ -12,7 +12,7 @@
domainName = "local"; domainName = "local";
ipv6 = false; # Should work either way ipv6 = false; # Should work either way
# Resolve local hostnames using Avahi DNS # Resolve local hostnames using Avahi DNS
nssmdns = true; nssmdns4 = true;
publish = { publish = {
enable = true; enable = true;
addresses = true; addresses = true;

View File

@ -2,6 +2,7 @@
let let
# This config specifies ports for Prometheus to scrape information
arrConfig = { arrConfig = {
radarr = { radarr = {
exportarrPort = "9707"; exportarrPort = "9707";
@ -41,6 +42,8 @@ in {
sabnzbd = { sabnzbd = {
enable = true; enable = true;
group = "media"; group = "media";
# The config file must be editable within the application
# It contains server configs and credentials
configFile = "/data/downloads/sabnzbd/sabnzbd.ini"; configFile = "/data/downloads/sabnzbd/sabnzbd.ini";
}; };
sonarr = { sonarr = {
@ -53,16 +56,23 @@ in {
}; };
}; };
# Create a media group to be shared between services
users.groups.media = { }; users.groups.media = { };
# Give the human user access to the media group
users.users.${config.user}.extraGroups = [ "media" ]; users.users.${config.user}.extraGroups = [ "media" ];
# Allows media group to read/write the sabnzbd directory
users.users.sabnzbd.homeMode = "0770"; users.users.sabnzbd.homeMode = "0770";
unfreePackages = [ "unrar" ]; # Required for sabnzbd unfreePackages = [ "unrar" ]; # Required as a dependency for sabnzbd
# Requires updating the base_url config value in each service # Requires updating the base_url config value in each service
# If you try to rewrite the URL, the service won't redirect properly # If you try to rewrite the URL, the service won't redirect properly
caddy.routes = [ caddy.routes = [
{ {
# Group means that routes with the same name are mutually exclusive,
# so they are split between the appropriate services.
group = "download"; group = "download";
match = [{ match = [{
host = [ config.hostnames.download ]; host = [ config.hostnames.download ];
@ -70,6 +80,7 @@ in {
}]; }];
handle = [{ handle = [{
handler = "reverse_proxy"; handler = "reverse_proxy";
# We're able to reference the url and port of the service dynamically
upstreams = [{ dial = arrConfig.sonarr.url; }]; upstreams = [{ dial = arrConfig.sonarr.url; }];
}]; }];
} }
@ -92,6 +103,7 @@ in {
}]; }];
handle = [{ handle = [{
handler = "reverse_proxy"; handler = "reverse_proxy";
# Prowlarr doesn't offer a dynamic config, so we have to hardcode it
upstreams = [{ dial = "localhost:9696"; }]; upstreams = [{ dial = "localhost:9696"; }];
}]; }];
} }
@ -104,6 +116,7 @@ in {
handle = [{ handle = [{
handler = "reverse_proxy"; handler = "reverse_proxy";
upstreams = [{ upstreams = [{
# Bazarr only dynamically sets the port, not the host
dial = "localhost:${ dial = "localhost:${
builtins.toString config.services.bazarr.listenPort builtins.toString config.services.bazarr.listenPort
}"; }";
@ -145,10 +158,12 @@ in {
Type = "simple"; Type = "simple";
DynamicUser = true; DynamicUser = true;
ExecStart = let ExecStart = let
# Sabnzbd doesn't accept the URI path, unlike the others
url = if name != "sabnzbd" then url = if name != "sabnzbd" then
"http://${attrs.url}/${name}" "http://${attrs.url}/${name}"
else else
"http://${attrs.url}"; "http://${attrs.url}";
# Exportarr is trained to pull from the arr services
in '' in ''
${pkgs.exportarr}/bin/exportarr ${name} \ ${pkgs.exportarr}/bin/exportarr ${name} \
--url ${url} \ --url ${url} \
@ -197,7 +212,7 @@ in {
prefix = "API_KEY="; prefix = "API_KEY=";
}; };
# Prometheus scrape targets # Prometheus scrape targets (expose Exportarr to Prometheus)
prometheus.scrapeTargets = map (key: prometheus.scrapeTargets = map (key:
"127.0.0.1:${ "127.0.0.1:${
lib.attrsets.getAttrFromPath [ key "exportarrPort" ] arrConfig lib.attrsets.getAttrFromPath [ key "exportarrPort" ] arrConfig

View File

@ -1,3 +1,6 @@
# This is my setup for backing up SQlite databases and other systems to S3 or
# S3-equivalent services (like Backblaze B2).
{ config, lib, ... }: { { config, lib, ... }: {
options = { options = {

View File

@ -1,3 +1,10 @@
# Bind is a DNS service. This allows me to resolve public domains locally so
# when I'm at home, I don't have to travel over the Internet to reach my
# server.
# To set this on all home machines, I point my router's DNS resolver to the
# local IP address of the machine running this service (swan).
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
@ -16,11 +23,19 @@ in {
config = lib.mkIf config.services.bind.enable { config = lib.mkIf config.services.bind.enable {
# Normally I block all requests not coming from Cloudflare, so I have to also
# allow my local network.
caddy.cidrAllowlist = [ "192.168.0.0/16" ]; caddy.cidrAllowlist = [ "192.168.0.0/16" ];
services.bind = { services.bind = {
# Allow requests coming from these IPs. This way I don't somehow get
# spammed with DNS requests coming from the Internet.
cacheNetworks = [ "127.0.0.0/24" "192.168.0.0/16" ]; cacheNetworks = [ "127.0.0.0/24" "192.168.0.0/16" ];
# When making normal DNS requests, forward them to Cloudflare to resolve.
forwarders = [ "1.1.1.1" "1.0.0.1" ]; forwarders = [ "1.1.1.1" "1.0.0.1" ];
ipv4Only = true; ipv4Only = true;
# Use rpz zone as an override # Use rpz zone as an override
@ -47,6 +62,7 @@ in {
}; };
# We must allow DNS traffic to hit our machine as well
networking.firewall.allowedTCPPorts = [ 53 ]; networking.firewall.allowedTCPPorts = [ 53 ];
networking.firewall.allowedUDPPorts = [ 53 ]; networking.firewall.allowedUDPPorts = [ 53 ];

View File

@ -1,3 +1,14 @@
# Caddy is a reverse proxy, like Nginx or Traefik. This creates an ingress
# point from my local network or the public (via Cloudflare). Instead of a
# Caddyfile, I'm using the more expressive JSON config file format. This means
# I can source routes from other areas in my config and build the JSON file
# using the result of the expression.
# Caddy helpfully provides automatic ACME cert generation and management, but
# it requires a form of validation. We are using a custom build of Caddy
# (compiled with an overlay) to insert a plugin for managing DNS validation
# with Cloudflare's DNS API.
{ config, pkgs, lib, ... }: { { config, pkgs, lib, ... }: {
options = { options = {
@ -42,12 +53,17 @@
configFile = pkgs.writeText "Caddyfile" (builtins.toJSON { configFile = pkgs.writeText "Caddyfile" (builtins.toJSON {
apps.http.servers.main = { apps.http.servers.main = {
listen = [ ":443" ]; listen = [ ":443" ];
# These routes are pulled from the rest of this repo
routes = config.caddy.routes; routes = config.caddy.routes;
errors.routes = config.caddy.blocks; errors.routes = config.caddy.blocks;
logs = { }; # Uncomment to collect access logs
logs = { }; # Uncommenting collects access logs
}; };
apps.http.servers.metrics = { }; # Enables Prometheus metrics apps.http.servers.metrics = { }; # Enables Prometheus metrics
apps.tls.automation.policies = config.caddy.tlsPolicies; apps.tls.automation.policies = config.caddy.tlsPolicies;
# Setup logging to file
logging.logs.main = { logging.logs.main = {
encoder = { format = "console"; }; encoder = { format = "console"; };
writer = { writer = {
@ -58,13 +74,23 @@
}; };
level = "INFO"; level = "INFO";
}; };
}); });
}; };
# Allows Caddy to serve lower ports (443, 80)
systemd.services.caddy.serviceConfig.AmbientCapabilities =
"CAP_NET_BIND_SERVICE";
# Required for web traffic to reach this machine
networking.firewall.allowedTCPPorts = [ 80 443 ]; networking.firewall.allowedTCPPorts = [ 80 443 ];
# HTTP/3 QUIC uses UDP (not sure if being used)
networking.firewall.allowedUDPPorts = [ 443 ]; networking.firewall.allowedUDPPorts = [ 443 ];
# Caddy exposes Prometheus metrics with the admin API
# https://caddyserver.com/docs/api
prometheus.scrapeTargets = [ "127.0.0.1:2019" ]; prometheus.scrapeTargets = [ "127.0.0.1:2019" ];
}; };

View File

@ -1,3 +1,9 @@
# Calibre-web is an E-Book library and management tool.
# - Exposed to the public via Caddy.
# - Hostname defined with config.hostnames.books
# - File directory backed up to S3 on a cron schedule.
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
@ -26,6 +32,7 @@ in {
}; };
}; };
# Allow web traffic to Caddy
caddy.routes = [{ caddy.routes = [{
match = [{ host = [ config.hostnames.books ]; }]; match = [{ host = [ config.hostnames.books ]; }];
handle = [{ handle = [{
@ -35,6 +42,8 @@ in {
builtins.toString config.services.calibre-web.listen.port builtins.toString config.services.calibre-web.listen.port
}"; }";
}]; }];
# This is required when calibre-web is behind a reverse proxy
# https://github.com/janeczku/calibre-web/issues/19
headers.request.add."X-Script-Name" = [ "/calibre-web" ]; headers.request.add."X-Script-Name" = [ "/calibre-web" ];
}]; }];
}]; }];

View File

@ -1,3 +1,12 @@
# Cloudflare Tunnel is a service for accessing the network even behind a
# firewall, through outbound-only requests. It works by installing an agent on
# our machines that exposes services through Cloudflare Access (Zero Trust),
# similar to something like Tailscale.
# In this case, we're using Cloudflare Tunnel to enable SSH access over a web
# browser even when outside of my network. This is probably not the safest
# choice but I feel comfortable enough with it anyway.
{ config, lib, ... }: { config, lib, ... }:
# First time setup: # First time setup:
@ -40,23 +49,28 @@
tunnels = { tunnels = {
"${config.cloudflareTunnel.id}" = { "${config.cloudflareTunnel.id}" = {
credentialsFile = config.secrets.cloudflared.dest; credentialsFile = config.secrets.cloudflared.dest;
# Catch-all if no match (should never happen anyway)
default = "http_status:404"; default = "http_status:404";
# Match from ingress of any valid server name to SSH access
ingress = { "*.masu.rs" = "ssh://localhost:22"; }; ingress = { "*.masu.rs" = "ssh://localhost:22"; };
}; };
}; };
}; };
# Grant Cloudflare access to SSH into this server
environment.etc = { environment.etc = {
"ssh/ca.pub".text = '' "ssh/ca.pub".text = ''
${config.cloudflareTunnel.ca} ${config.cloudflareTunnel.ca}
''; '';
# Must match the username of the email address in Cloudflare Access # Must match the username portion of the email address in Cloudflare
# Access
"ssh/authorized_principals".text = '' "ssh/authorized_principals".text = ''
${config.user} ${config.user}
''; '';
}; };
# Adjust SSH config to allow access from Cloudflare's certificate
services.openssh.extraConfig = '' services.openssh.extraConfig = ''
PubkeyAuthentication yes PubkeyAuthentication yes
TrustedUserCAKeys /etc/ssh/ca.pub TrustedUserCAKeys /etc/ssh/ca.pub

View File

@ -1,5 +1,13 @@
# This module is necessary for hosts that are serving through Cloudflare. # This module is necessary for hosts that are serving through Cloudflare.
# Cloudflare is a CDN service that is used to serve the domain names and
# caching for my websites and services. Since Cloudflare acts as our proxy, we
# must allow access over the Internet from Cloudflare's IP ranges.
# We also want to validate our HTTPS certificates from Caddy. We'll use Caddy's
# DNS validation plugin to connect to Cloudflare and automatically create
# validation DNS records for our generated certificates.
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
@ -52,28 +60,53 @@ in {
dns = { dns = {
provider = { provider = {
name = "cloudflare"; name = "cloudflare";
api_token = "{env.CF_API_TOKEN}"; api_token = "{env.CLOUDFLARE_API_TOKEN}";
}; };
resolvers = [ "1.1.1.1" ]; resolvers = [ "1.1.1.1" ];
}; };
}; };
}]; }];
}]; }];
# Allow Caddy to read Cloudflare API key for DNS validation
systemd.services.caddy.serviceConfig.EnvironmentFile = systemd.services.caddy.serviceConfig.EnvironmentFile =
config.secrets.cloudflareApi.dest; config.secrets.cloudflare-api.dest;
systemd.services.caddy.serviceConfig.AmbientCapabilities =
"CAP_NET_BIND_SERVICE";
# API key must have access to modify Cloudflare DNS records # API key must have access to modify Cloudflare DNS records
secrets.cloudflareApi = { secrets.cloudflare-api = {
source = ../../../private/cloudflare-api.age; source = ../../../private/cloudflare-api.age;
dest = "${config.secretsDirectory}/cloudflare-api"; dest = "${config.secretsDirectory}/cloudflare-api";
owner = "caddy"; owner = "caddy";
group = "caddy"; group = "caddy";
}; };
systemd.services.cloudflare-api-secret.postStop = ''
/run/current-system/sw/bin/systemctl restart caddy.service
/run/current-system/sw/bin/systemctl restart cloudflare-dyndns.service
'';
# Wait for secret to exist
systemd.services.caddy = {
after = [ "cloudflare-api-secret.service" ];
requires = [ "cloudflare-api-secret.service" ];
};
# Allows Nextcloud to trust Cloudflare IPs # Allows Nextcloud to trust Cloudflare IPs
services.nextcloud.config.trustedProxies = cloudflareIpRanges; services.nextcloud.settings.trusted_proxies = cloudflareIpRanges;
# Allows Transmission to trust Cloudflare IPs
services.transmission.settings.rpc-whitelist =
builtins.concatStringsSep "," ([ "127.0.0.1" ] ++ cloudflareIpRanges);
services.cloudflare-dyndns = {
enable = true;
proxied = true;
apiTokenFile = config.secrets.cloudflare-api.dest;
};
# Wait for secret to exist
systemd.services.cloudflare-dyndns = {
after = [ "cloudflare-api-secret.service" ];
requires = [ "cloudflare-api-secret.service" ];
};
}; };
} }

View File

@ -1,3 +1,6 @@
# This file imports all the other files in this directory for use as modules in
# my config.
{ ... }: { { ... }: {
imports = [ imports = [
@ -8,17 +11,22 @@
./calibre.nix ./calibre.nix
./cloudflare-tunnel.nix ./cloudflare-tunnel.nix
./cloudflare.nix ./cloudflare.nix
./identity.nix
./irc.nix
./gitea-runner.nix ./gitea-runner.nix
./gitea.nix ./gitea.nix
./gnupg.nix ./gnupg.nix
./grafana.nix ./grafana.nix
./honeypot.nix ./honeypot.nix
./influxdb2.nix
./jellyfin.nix ./jellyfin.nix
./keybase.nix ./keybase.nix
./mullvad.nix ./mullvad.nix
./n8n.nix ./n8n.nix
./netdata.nix ./netdata.nix
./nextcloud.nix ./nextcloud.nix
./paperless.nix
./postgresql.nix
./prometheus.nix ./prometheus.nix
./samba.nix ./samba.nix
./secrets.nix ./secrets.nix

View File

@ -1,3 +1,9 @@
# Gitea Actions is a CI/CD service for the Gitea source code server, meaning it
# allows us to run code operations (such as testing or deploys) when our git
# repositories are updated. Any machine can act as a Gitea Action Runner, so
# the Runners don't necessarily need to be running Gitea. All we need is an API
# key for Gitea to connect to it and register ourselves as a Runner.
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
{ {

View File

@ -11,11 +11,21 @@ in {
actions.ENABLED = true; actions.ENABLED = true;
metrics.ENABLED = true; metrics.ENABLED = true;
repository = { repository = {
# Pushing to a repo that doesn't exist automatically creates one as
# private.
DEFAULT_PUSH_CREATE_PRIVATE = true; DEFAULT_PUSH_CREATE_PRIVATE = true;
# Allow git over HTTP.
DISABLE_HTTP_GIT = false; DISABLE_HTTP_GIT = false;
# Allow requests hitting the specified hostname.
ACCESS_CONTROL_ALLOW_ORIGIN = config.hostnames.git; ACCESS_CONTROL_ALLOW_ORIGIN = config.hostnames.git;
# Automatically create viable users/orgs on push.
ENABLE_PUSH_CREATE_USER = true; ENABLE_PUSH_CREATE_USER = true;
ENABLE_PUSH_CREATE_ORG = true; ENABLE_PUSH_CREATE_ORG = true;
# Default when creating new repos.
DEFAULT_BRANCH = "main"; DEFAULT_BRANCH = "main";
}; };
server = { server = {
@ -25,11 +35,15 @@ in {
SSH_PORT = 22; SSH_PORT = 22;
START_SSH_SERVER = false; # Use sshd instead START_SSH_SERVER = false; # Use sshd instead
DISABLE_SSH = false; DISABLE_SSH = false;
# SSH_LISTEN_HOST = "0.0.0.0";
# SSH_LISTEN_PORT = 122;
}; };
# Don't allow public users to register accounts.
service.DISABLE_REGISTRATION = true; service.DISABLE_REGISTRATION = true;
# Force using HTTPS for all session access.
session.COOKIE_SECURE = true; session.COOKIE_SECURE = true;
# Hide users' emails.
ui.SHOW_USER_EMAIL = false; ui.SHOW_USER_EMAIL = false;
}; };
extraConfig = null; extraConfig = null;
@ -39,6 +53,7 @@ in {
users.users.${config.user}.extraGroups = [ "gitea" ]; users.users.${config.user}.extraGroups = [ "gitea" ];
caddy.routes = [ caddy.routes = [
# Prevent public access to Prometheus metrics.
{ {
match = [{ match = [{
host = [ config.hostnames.git ]; host = [ config.hostnames.git ];
@ -49,6 +64,7 @@ in {
status_code = "403"; status_code = "403";
}]; }];
} }
# Allow access to primary server.
{ {
match = [{ host = [ config.hostnames.git ]; }]; match = [{ host = [ config.hostnames.git ]; }];
handle = [{ handle = [{
@ -63,6 +79,7 @@ in {
} }
]; ];
# Scrape the metrics endpoint for Prometheus.
prometheus.scrapeTargets = [ prometheus.scrapeTargets = [
"127.0.0.1:${ "127.0.0.1:${
builtins.toString config.services.gitea.settings.server.HTTP_PORT builtins.toString config.services.gitea.settings.server.HTTP_PORT

Some files were not shown because too many files have changed in this diff Show More