1 Commits

Author SHA1 Message Date
068cdbf5d4 try building mole for eblume
relates to #68
2024-06-26 16:24:35 -04:00
94 changed files with 626 additions and 1855 deletions

View File

@ -3,7 +3,7 @@ name: Update Flake
on: on:
workflow_dispatch: # allows manual triggering workflow_dispatch: # allows manual triggering
schedule: schedule:
- cron: '33 3 * * 6' # runs weekly on Saturday at 03:33 - cron: '33 3 * * 0' # runs weekly on Sunday at 03:33
permissions: permissions:
contents: write contents: write
@ -19,14 +19,12 @@ jobs:
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Install Nix - name: Install Nix
uses: DeterminateSystems/nix-installer-action@v11 uses: DeterminateSystems/nix-installer-action@v11
with:
nix-package-url: https://releases.nixos.org/nix/nix-2.18.4/nix-2.18.4-x86_64-linux.tar.xz
- name: Check Nixpkgs Inputs - name: Check Nixpkgs Inputs
uses: DeterminateSystems/flake-checker-action@v7 uses: DeterminateSystems/flake-checker-action@v7
- name: Add Nix Cache - name: Add Nix Cache
uses: DeterminateSystems/magic-nix-cache-action@v6 uses: DeterminateSystems/magic-nix-cache-action@v6
- name: Update flake.lock - name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@v23 uses: DeterminateSystems/update-flake-lock@v21
id: update id: update
with: with:
pr-title: "Update flake.lock" # Title of PR to be created pr-title: "Update flake.lock" # Title of PR to be created

View File

@ -21,7 +21,7 @@
exit 1 exit 1
fi fi
${pkgs.disko}/bin/disko \ ${pkgs.disko-packaged}/bin/disko \
--mode create \ --mode create \
--dry-run \ --dry-run \
--flake "path:$(pwd)#root" \ --flake "path:$(pwd)#root" \
@ -31,7 +31,7 @@
"This will ERASE ALL DATA on the disk /dev/''${DISK}. Are you sure you want to continue?" \ "This will ERASE ALL DATA on the disk /dev/''${DISK}. Are you sure you want to continue?" \
--default=false --default=false
${pkgs.disko}/bin/disko \ ${pkgs.disko-packaged}/bin/disko \
--mode create \ --mode create \
--flake "path:$(pwd)#root" \ --flake "path:$(pwd)#root" \
--arg disk "/dev/''${DISK}" --arg disk "/dev/''${DISK}"

467
flake.lock generated
View File

@ -3,11 +3,11 @@
"baleia-nvim-src": { "baleia-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1721805312, "lastModified": 1717182435,
"narHash": "sha256-qA1x5kplP2I8bURO0I4R0gt/zeznu9hQQ+XHptLGuwc=", "narHash": "sha256-duI3myrJSvmtjF9n7NVrVOsuSo1O3JEypA5ghBHsULc=",
"owner": "m00qek", "owner": "m00qek",
"repo": "baleia.nvim", "repo": "baleia.nvim",
"rev": "1b25eac3ac03659c3d3af75c7455e179e5f197f7", "rev": "4d3b27dbec65a44ceecd9306f605a980bcf4e9b1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -51,11 +51,11 @@
}, },
"cl-nix-lite": { "cl-nix-lite": {
"locked": { "locked": {
"lastModified": 1728174978, "lastModified": 1717972076,
"narHash": "sha256-Grqqg+xuicANB85j0gNEXxi9SBKY7bzGeTuyi95eGcY=", "narHash": "sha256-hnZEsDInTcsVSL5LBGDAZegAxVLBus/wiJh+sNM15zU=",
"owner": "hraban", "owner": "hraban",
"repo": "cl-nix-lite", "repo": "cl-nix-lite",
"rev": "31cfe6275c341eb3120a99f4b1c8516c49a29d87", "rev": "cc920bfb0a6402d3871f470c98d65266126973e4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -67,11 +67,11 @@
"cmp-nvim-lsp-src": { "cmp-nvim-lsp-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733823748, "lastModified": 1715931395,
"narHash": "sha256-iaihXNCF5bB5MdeoosD/kc3QtpA/QaIDZVLiLIurBSM=", "narHash": "sha256-CT1+Z4XJBVsl/RqvJeGmyitD6x7So0ylXvvef5jh7I8=",
"owner": "hrsh7th", "owner": "hrsh7th",
"repo": "cmp-nvim-lsp", "repo": "cmp-nvim-lsp",
"rev": "99290b3ec1322070bcfb9e846450a46f6efa50f0", "rev": "39e2eda76828d88b773cc27a3f61d2ad782c922d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -87,11 +87,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1735956190, "lastModified": 1718662658,
"narHash": "sha256-svzx3yVXD5tbBJZCn3Lt1RriH8GHo6CyVUPTHejf7sU=", "narHash": "sha256-AKG7BsqtVWDlefgzyKz7vjaKTLi4+bmTSBhowbQoZtM=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "3feaf376d75d3d58ebf7e9a4f584d00628548ad9", "rev": "29b3096a6e283d7e6779187244cb2a3942239fdf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -108,11 +108,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1735468753, "lastModified": 1718846788,
"narHash": "sha256-2dt1nOe9zf9pDkf5Kn7FUFyPRo581s0n90jxYXJ94l0=", "narHash": "sha256-9dtXYtEkmXoUJV+PGLqscqF7qTn4AIhAKpFWRFU2NYs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "84a5b93637cc16cbfcc61b6e1684d626df61eb21", "rev": "e1174d991944a01eaaa04bc59c6281edca4c0e6e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -145,11 +145,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1735952135, "lastModified": 1718930737,
"narHash": "sha256-1omANFYtwEeAwwzSQqJbob1ctswLa9L9QS18Kg8ICjc=", "narHash": "sha256-+nKJ/VP6X+hirXqRry3GzdNn4OJvOdB4nRnJY22ixFw=",
"owner": "bandithedoge", "owner": "bandithedoge",
"repo": "nixpkgs-firefox-darwin", "repo": "nixpkgs-firefox-darwin",
"rev": "72ce135b49236c110d86bce6e6d25bfafcc2158d", "rev": "087919070dffc9798a8cb753e97babe287f06c25",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -161,11 +161,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1730663653, "lastModified": 1697816753,
"narHash": "sha256-kFCUWettiFHDIqxCWWQ9qY8pVh+Lj+XL0Giyy/kdomg=", "narHash": "sha256-40to80AEIyKCQI0xMKCeF5ePoIKTYgjVVCZeu4CnTxM=",
"owner": "hraban", "owner": "hraban",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "e5b16676185cb7548581c852f51ce7f3a49bba5e", "rev": "6025bade1336a36014639bc3f67eacc853dab78f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -178,11 +178,11 @@
"flake-compat_2": { "flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733328505, "lastModified": 1696426674,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -191,58 +191,16 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1710146030,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": [
"mac-app-util",
"systems"
]
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -250,9 +208,9 @@
"type": "indirect" "type": "indirect"
} }
}, },
"flake-utils_3": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1705309234, "lastModified": 1705309234,
@ -268,16 +226,16 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_4": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1710146030,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -286,30 +244,14 @@
"type": "github" "type": "github"
} }
}, },
"gh-collaborators": {
"flake": false,
"locked": {
"lastModified": 1717117275,
"narHash": "sha256-x3p2bHL6U8gWanXnTTJGgA9x4Ixy9AOZiBbfcfn5VVw=",
"owner": "katiem0",
"repo": "gh-collaborators",
"rev": "4dfcd0b5c2e31f2d0fbfd4b83fdfae787a5e6ff8",
"type": "github"
},
"original": {
"owner": "katiem0",
"repo": "gh-collaborators",
"type": "github"
}
},
"hmts-nvim-src": { "hmts-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1729786258, "lastModified": 1715076655,
"narHash": "sha256-V5dwIJdxBulFVKk1iSlf4H5NRz1UH7uYQeMvwtgkpIs=", "narHash": "sha256-vDTqJQzLyg0nmlC+CrLnPkYti1rPxmvRW8eQq/9Zg+M=",
"owner": "calops", "owner": "calops",
"repo": "hmts.nvim", "repo": "hmts.nvim",
"rev": "c7ff4c3ad96cd05664b18fb5bbbe2abbd7682dd2", "rev": "19a91816c123173a4551a6a04f2882338f20db1d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -325,11 +267,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1735947440, "lastModified": 1718983978,
"narHash": "sha256-jnEcfmOhWntmVEcqlvs+j532+mvmgsKtQSSfukgkn+A=", "narHash": "sha256-lp6stESwTLBZUQ5GBivxwNehShmBp4jqeX/1xahM61w=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "a9987622b7b93c82e147f198574e8e6ffbf5e327", "rev": "c559542f0aa87971a7f4c1b3478fe33cc904b902",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -339,44 +281,21 @@
"type": "github" "type": "github"
} }
}, },
"jujutsu": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1735923240,
"narHash": "sha256-xRJvm/YfV9aHyesx52N/t6fauk86Ajfj/ILFldEZ8nk=",
"owner": "martinvonz",
"repo": "jj",
"rev": "1ddfc59ee95d680ccbd0cfcbcf86c9202f8e44ca",
"type": "github"
},
"original": {
"owner": "martinvonz",
"repo": "jj",
"type": "github"
}
},
"mac-app-util": { "mac-app-util": {
"inputs": { "inputs": {
"cl-nix-lite": "cl-nix-lite", "cl-nix-lite": "cl-nix-lite",
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ]
"systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1732920695, "lastModified": 1718893255,
"narHash": "sha256-1fxvJZUznwrmEtYqpPuWi2tPcL9kj6v7p1J7ZZncAPE=", "narHash": "sha256-NdSDGdz5eU/EcnGn8ECP1V+mn5hyGOZQ4ybv2bWTpuk=",
"owner": "hraban", "owner": "hraban",
"repo": "mac-app-util", "repo": "mac-app-util",
"rev": "548672d0cb661ce11d08ee8bde92b87d2a75c872", "rev": "1857b26aceaf64c2b6a357eb83cf34139b6365cc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -388,68 +307,67 @@
"nextcloud-cookbook": { "nextcloud-cookbook": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1726214817, "lastModified": 1702545935,
"narHash": "sha256-Pfa+Xbopg20os+pnGgg+wpEX1MI5fz5JMb0K4a8rBhs=", "narHash": "sha256-19LN1nYJJ0RMWj6DrYPvHzocTyhMfYdpdhBFch3fpHE=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.2/cookbook-0.11.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/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.2/cookbook-0.11.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": {
"lastModified": 1729501349, "lastModified": 1699624334,
"narHash": "sha256-OV6HhFBzmnQBO5btGEnqmKlaUMY7/t2Qm3XebclpBlM=", "narHash": "sha256-RCL2RP5twRDLxI/KfAX6QLYQOzqZmSWsfrC5ZQIwTD4=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud-releases/external/releases/download/v5.5.2/external-v5.5.2.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.5.2/external-v5.5.2.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": {
"lastModified": 1729667621, "lastModified": 1703426420,
"narHash": "sha256-pnvyMZQ+NYMgH0Unfh5S19HdZSjnghgoUDAoi2KIXNI=", "narHash": "sha256-AENBJH/bEob5JQvw4WEi864mdLYJ5Mqe78HJH6ceCpI=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nextcloud/news/releases/download/25.0.0-alpha12/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/25.0.0-alpha12/news.tar.gz" "url": "https://github.com/nextcloud/news/releases/download/25.0.0-alpha3/news.tar.gz"
} }
}, },
"nextcloud-snappymail": { "nextcloud-snappymail": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1735962117, "narHash": "sha256-7oJEJ6t6iS/pcnSHashf1AkOEf+gKizpQHBy9XwY4Yo=",
"narHash": "sha256-oCw6Brs85rINBHvz3UJXheyLVqvA3RgPXG03b30Fx7E=", "type": "file",
"type": "tarball", "url": "https://github.com/nmasur/snappymail-nextcloud/releases/download/v2.36.1/snappymail-2.36.1-nextcloud.tar.gz"
"url": "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "file",
"url": "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz" "url": "https://github.com/nmasur/snappymail-nextcloud/releases/download/v2.36.1/snappymail-2.36.1-nextcloud.tar.gz"
} }
}, },
"nix2vim": { "nix2vim": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1732820845, "lastModified": 1718621825,
"narHash": "sha256-YPXk41l4PzKb5rtcxkYhymwjHJG95fxl4iXIzXnftr8=", "narHash": "sha256-bSfjwRgKKpLyjEDPRAF1hlJKc7QDoqopalHwNCB/eAA=",
"owner": "gytis-ivaskevicius", "owner": "gytis-ivaskevicius",
"repo": "nix2vim", "repo": "nix2vim",
"rev": "e2c511ea553418dd432005875c649b09d56b7e58", "rev": "1db11dbf8a4d124e02244fa5c4ff219b672a8e5b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -460,11 +378,11 @@
}, },
"nixlib": { "nixlib": {
"locked": { "locked": {
"lastModified": 1734829460, "lastModified": 1712450863,
"narHash": "sha256-dPhc+f2wkmhMqMIfq+hColJdysgVxKP9ilZ5bR0NRZI=", "narHash": "sha256-K6IkdtMtq9xktmYPj0uaYc8NsIqHuaAoRBaMgu9Fvrw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "0a31e8d833173ae63e43fd9dbff1ccf09c4f778c", "rev": "3c62b6a12571c9a7f65ab037173ee153d539905f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -481,11 +399,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1734915500, "lastModified": 1718025593,
"narHash": "sha256-A7CTIQ8SW0hfbhKlwK+vSsu4pD+Oaelw3v6goX6go+U=", "narHash": "sha256-WZ1gdKq/9u1Ns/oXuNsDm+W0salonVA0VY1amw8urJ4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "051d1b2dda3b2e81b38d82e2b691e5c2f4d335f4", "rev": "35c20ba421dfa5059e20e0ef2343c875372bdcf3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -496,11 +414,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1735834308, "lastModified": 1718895438,
"narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=", "narHash": "sha256-k3JqJrkdoYwE3fHE6xGDY676AYmyh4U2Zw+0Bwe5DLU=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65", "rev": "d603719ec6e294f034936c0d0dc06f689d91b6c3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -526,50 +444,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-stable": {
"locked": {
"lastModified": 1735563628,
"narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1735834308,
"narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": { "nur": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2",
"treefmt-nix": "treefmt-nix"
},
"locked": { "locked": {
"lastModified": 1735962132, "lastModified": 1719001822,
"narHash": "sha256-7elXLoHAQ/+usWi6R08SntEiV8WyAisJAin3T0GEBPE=", "narHash": "sha256-rbEP1CTzYvdSAKf1a729De9t8GMIrZ5GmD+PdYCnrgg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nur", "repo": "nur",
"rev": "b085ce9e13651cc235ca993af7a5b09990d27807", "rev": "e7edcaeae9db01224266febe88eb7d3411055636",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -581,11 +462,11 @@
"nvim-lint-src": { "nvim-lint-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1734606055, "lastModified": 1717789608,
"narHash": "sha256-tD1ciHUdHIcqymImZjSSNq6M5hjsrD66AJhmLTy0cIY=", "narHash": "sha256-LNYFxAM9lQNNOIOc+IgKgbSRp2U09B/9HivSCwMyUpQ=",
"owner": "mfussenegger", "owner": "mfussenegger",
"repo": "nvim-lint", "repo": "nvim-lint",
"rev": "1fea92f1d9908eaa5eb8bafe08b4293d7aadaa55", "rev": "941fa1220a61797a51f3af9ec6b7d74c8c7367ce",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -614,11 +495,11 @@
"nvim-tree-lua-src": { "nvim-tree-lua-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1734820548, "lastModified": 1717900986,
"narHash": "sha256-4PmP31vYPH9xw4AjV5rDSKvcvZGTnIaPfR4Bwc0lAiA=", "narHash": "sha256-7KO3wPW65IH4m0jEoyFScNiAVwrlNHU+p0H55AuwlWk=",
"owner": "kyazdani42", "owner": "kyazdani42",
"repo": "nvim-tree.lua", "repo": "nvim-tree.lua",
"rev": "68fc4c20f5803444277022c681785c5edd11916d", "rev": "2086e564c4d23fea714e8a6d63b881e551af2f41",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -630,37 +511,20 @@
"nvim-treesitter-src": { "nvim-treesitter-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1705679158, "lastModified": 1718957498,
"narHash": "sha256-zAyiitJIgOCZTB0CmgNt0MHENM70SOHLIoWrVwOJKFg=", "narHash": "sha256-GEuKEAZxLGMkyjdJGzrIKNR1X10RHlACC6s1lNOq7aw=",
"owner": "nvim-treesitter", "owner": "nvim-treesitter",
"repo": "nvim-treesitter", "repo": "nvim-treesitter",
"rev": "f197a15b0d1e8d555263af20add51450e5aaa1f0", "rev": "b967bbc27b564001c3d3b8ea93444cf6d0b21d23",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nvim-treesitter", "owner": "nvim-treesitter",
"ref": "v0.9.2", "ref": "master",
"repo": "nvim-treesitter", "repo": "nvim-treesitter",
"type": "github" "type": "github"
} }
}, },
"osc": {
"flake": false,
"locked": {
"lastModified": 1732197203,
"narHash": "sha256-xL9mqwb+C6WbuJ/qk0lNbi9xd24PbKi5G0FlwaH5XPk=",
"owner": "theimpostor",
"repo": "osc",
"rev": "87b316b3f96a22fd85654cd7bd091f2cac1c6691",
"type": "github"
},
"original": {
"owner": "theimpostor",
"ref": "v0.4.6",
"repo": "osc",
"type": "github"
}
},
"ren": { "ren": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -703,10 +567,8 @@
"disko": "disko", "disko": "disko",
"fidget-nvim-src": "fidget-nvim-src", "fidget-nvim-src": "fidget-nvim-src",
"firefox-darwin": "firefox-darwin", "firefox-darwin": "firefox-darwin",
"gh-collaborators": "gh-collaborators",
"hmts-nvim-src": "hmts-nvim-src", "hmts-nvim-src": "hmts-nvim-src",
"home-manager": "home-manager", "home-manager": "home-manager",
"jujutsu": "jujutsu",
"mac-app-util": "mac-app-util", "mac-app-util": "mac-app-util",
"nextcloud-cookbook": "nextcloud-cookbook", "nextcloud-cookbook": "nextcloud-cookbook",
"nextcloud-external": "nextcloud-external", "nextcloud-external": "nextcloud-external",
@ -716,19 +578,15 @@
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-caddy": "nixpkgs-caddy", "nixpkgs-caddy": "nixpkgs-caddy",
"nixpkgs-stable": "nixpkgs-stable",
"nur": "nur", "nur": "nur",
"nvim-lint-src": "nvim-lint-src", "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",
"osc": "osc",
"ren": "ren", "ren": "ren",
"rep": "rep", "rep": "rep",
"snipe-nvim-src": "snipe-nvim-src",
"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",
"tiny-inline-diagnostic-nvim-src": "tiny-inline-diagnostic-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",
@ -742,43 +600,6 @@
"zenyd-mpv-scripts": "zenyd-mpv-scripts" "zenyd-mpv-scripts": "zenyd-mpv-scripts"
} }
}, },
"rust-overlay": {
"inputs": {
"nixpkgs": [
"jujutsu",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735784864,
"narHash": "sha256-tIl5p3ueaPw7T5T1UXkLc8ISMk6Y8CI/D/rd0msf73I=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "04d5f1836721461b256ec452883362c5edc5288e",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"snipe-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1734918876,
"narHash": "sha256-nut2POcxH1LgxTEKDikvRPPpbtmvlDDF52SoWZNC1Fg=",
"owner": "leath-dub",
"repo": "snipe.nvim",
"rev": "2550012916d4fb21d6d1c7a88a9bddde651bb1f0",
"type": "github"
},
"original": {
"owner": "leath-dub",
"repo": "snipe.nvim",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -795,21 +616,6 @@
} }
}, },
"systems_2": { "systems_2": {
"locked": {
"lastModified": 1689347925,
"narHash": "sha256-ozenz5bFe1UUqOn7f60HRmgc01BgTGIKZ4Xl+HbocGQ=",
"owner": "nix-systems",
"repo": "default-darwin",
"rev": "2235d7e6cc29ae99878133c95e9fe5e157661ffb",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-darwin",
"type": "github"
}
},
"systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -824,7 +630,7 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": { "systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -859,11 +665,11 @@
"telescope-project-nvim-src": { "telescope-project-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1733083023, "lastModified": 1701464478,
"narHash": "sha256-qEORRWYKBpK7fn7se8g+5uuVBJNu0T4JHSc0C2QzNDY=", "narHash": "sha256-touMCltcnqkrQYV1NtNeWLQeFVGt+WM3aIWIdKilA7w=",
"owner": "nvim-telescope", "owner": "nvim-telescope",
"repo": "telescope-project.nvim", "repo": "telescope-project.nvim",
"rev": "1d7920e799fc5001dffc7bd10909a86e0358eaf4", "rev": "1aaf16580a614601a7f7077d9639aeb457dc5559",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -872,35 +678,19 @@
"type": "github" "type": "github"
} }
}, },
"tiny-inline-diagnostic-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1735568714,
"narHash": "sha256-rZ5+w6v9ONFTQIXvwTUJuwZKRaXdHZUNEUDfBsC2IMM=",
"owner": "rachartier",
"repo": "tiny-inline-diagnostic.nvim",
"rev": "867902d5974a18c156c918ab8addbf091719de27",
"type": "github"
},
"original": {
"owner": "rachartier",
"repo": "tiny-inline-diagnostic.nvim",
"type": "github"
}
},
"toggleterm-nvim-src": { "toggleterm-nvim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1721232722, "lastModified": 1713792255,
"narHash": "sha256-hJ6nBCgSyYF1pY4lX+b8WZd49i5F6BwOmrl7xVSIwRw=", "narHash": "sha256-mM5bGgAemsRJD9U6U5K6ia5qb8NaTusM99x6xrtEBfw=",
"owner": "akinsho", "owner": "akinsho",
"repo": "toggleterm.nvim", "repo": "toggleterm.nvim",
"rev": "48be57eaba817f038d61bbf64d2c597f578c0827", "rev": "066cccf48a43553a80a210eb3be89a15d789d6e6",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "akinsho", "owner": "akinsho",
"ref": "v2.12.0", "ref": "v2.11.0",
"repo": "toggleterm.nvim", "repo": "toggleterm.nvim",
"type": "github" "type": "github"
} }
@ -908,11 +698,11 @@
"tree-sitter-bash": { "tree-sitter-bash": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1731338420, "lastModified": 1715005250,
"narHash": "sha256-JW+30zIyq8Xc7NG9V+YoFqC+57BjZXIbAvWPD2lqvIE=", "narHash": "sha256-rCuQbnQAOnQWKYreNH80nlL+0A1qbWbjMvtczcoWPrY=",
"owner": "tree-sitter", "owner": "tree-sitter",
"repo": "tree-sitter-bash", "repo": "tree-sitter-bash",
"rev": "49c31006d8307dcb12bc5770f35b6d5b9e2be68e", "rev": "2fbd860f802802ca76a6661ce025b3a3bca2d3ed",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -925,11 +715,11 @@
"tree-sitter-ini": { "tree-sitter-ini": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1725233451, "lastModified": 1716889525,
"narHash": "sha256-G11Aynq2rnkRwdkhspjYqtBD/h5k4aD+NvuE0QfploU=", "narHash": "sha256-IyHrIxcmuzs60zUiJv4E3nSkhSkgbcaLDUdeDx5mlHk=",
"owner": "justinmk", "owner": "justinmk",
"repo": "tree-sitter-ini", "repo": "tree-sitter-ini",
"rev": "962568c9efa71d25720ab42c5d36e222626ef3a6", "rev": "87176e524f0a98f5be75fa44f4f0ff5c6eac069c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -941,11 +731,11 @@
"tree-sitter-lua": { "tree-sitter-lua": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1729494737, "lastModified": 1710150044,
"narHash": "sha256-v+fFcIOv+bu+2IGI/Lh/Xbqd5BzbBjaa51ECd0hG7Ow=", "narHash": "sha256-uFaEptW4wPrqgHfB1mYmVltf+4no61L2cPgpsr5qBIU=",
"owner": "MunifTanjim", "owner": "MunifTanjim",
"repo": "tree-sitter-lua", "repo": "tree-sitter-lua",
"rev": "34e60e7f45fc313463c68090d88d742a55d1bd7a", "rev": "a24dab177e58c9c6832f96b9a73102a0cfbced4a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -958,11 +748,11 @@
"tree-sitter-puppet": { "tree-sitter-puppet": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1734835631, "lastModified": 1713617121,
"narHash": "sha256-bO5g5AdhzpB13yHklpAndUHIX7Rvd7OMjH0Ds2ATA6Q=", "narHash": "sha256-+zMgzyuGerJ8l+i5ZtWnmGr3i4fFiSLD5FssyKESsmI=",
"owner": "amaanq", "owner": "amaanq",
"repo": "tree-sitter-puppet", "repo": "tree-sitter-puppet",
"rev": "15f192929b7d317f5914de2b4accd37b349182a6", "rev": "584522f32495d648b18a53ccb52d988e60de127d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -974,11 +764,11 @@
"tree-sitter-python": { "tree-sitter-python": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1734908773, "lastModified": 1714528221,
"narHash": "sha256-71Od4sUsxGEvTwmXX8hBvzqD55hnXkVJublrhp1GICg=", "narHash": "sha256-hHQ5gK4dTRSdp0fLKarytU9vFhsBeQp7Ka61vFoIr7Y=",
"owner": "tree-sitter", "owner": "tree-sitter",
"repo": "tree-sitter-python", "repo": "tree-sitter-python",
"rev": "bffb65a8cfe4e46290331dfef0dbf0ef3679de11", "rev": "71778c2a472ed00a64abf4219544edbf8e4b86d7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1007,11 +797,11 @@
"tree-sitter-vimdoc": { "tree-sitter-vimdoc": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1729686839, "lastModified": 1717834376,
"narHash": "sha256-Vrl4/cZL+TWlUMEeWZoHCAWhvlefcl3ajGcwyTNKOhI=", "narHash": "sha256-v+XSWGm2Wdn9/rxNFMqXYACkGn6AvxZdxkClLuKnWGU=",
"owner": "neovim", "owner": "neovim",
"repo": "tree-sitter-vimdoc", "repo": "tree-sitter-vimdoc",
"rev": "d2e4b5c172a109966c2ce0378f73df6cede39400", "rev": "2249c44ecd3f5cf22da3dcccfb74f816ddb29245",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1020,27 +810,6 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733222881,
"narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "49717b5af6f80172275d47a418c9719a31a78b53",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"wallpapers": { "wallpapers": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -1060,17 +829,17 @@
"wsl": { "wsl": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1733854371, "lastModified": 1718710563,
"narHash": "sha256-K9qGHniYBbjqVcEiwXyiofj/IFf78L5F0/FCf+CKyr0=", "narHash": "sha256-O4rrM0Bkh3IRe8D600iniQ52QTmlnuTSp2KyXV7C2jE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "dee4425dcee3149475ead0cb6a616b8a028c5888", "rev": "2fb93bea657ad99a7005ef601c67cb2820560a41",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@ -7,9 +7,6 @@
# Used for system packages # Used for system packages
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# Used for specific stable packages
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
# Used for caddy plugins # Used for caddy plugins
nixpkgs-caddy.url = "github:jpds/nixpkgs/caddy-external-plugins"; nixpkgs-caddy.url = "github:jpds/nixpkgs/caddy-external-plugins";
@ -91,7 +88,7 @@
}; };
nvim-treesitter-src = { nvim-treesitter-src = {
# https://github.com/nvim-treesitter/nvim-treesitter/tags # https://github.com/nvim-treesitter/nvim-treesitter/tags
url = "github:nvim-treesitter/nvim-treesitter/v0.9.2"; url = "github:nvim-treesitter/nvim-treesitter/master";
flake = false; flake = false;
}; };
telescope-nvim-src = { telescope-nvim-src = {
@ -105,7 +102,7 @@
}; };
toggleterm-nvim-src = { toggleterm-nvim-src = {
# https://github.com/akinsho/toggleterm.nvim/tags # https://github.com/akinsho/toggleterm.nvim/tags
url = "github:akinsho/toggleterm.nvim/v2.12.0"; url = "github:akinsho/toggleterm.nvim/v2.11.0";
flake = false; flake = false;
}; };
bufferline-nvim-src = { bufferline-nvim-src = {
@ -130,14 +127,6 @@
url = "github:mfussenegger/nvim-lint"; url = "github:mfussenegger/nvim-lint";
flake = false; flake = false;
}; };
tiny-inline-diagnostic-nvim-src = {
url = "github:rachartier/tiny-inline-diagnostic.nvim";
flake = false;
};
snipe-nvim-src = {
url = "github:leath-dub/snipe.nvim";
flake = false;
};
# Tree-Sitter Grammars # Tree-Sitter Grammars
tree-sitter-bash = { tree-sitter-bash = {
@ -175,13 +164,6 @@
flake = false; flake = false;
}; };
# Git alternative
# Fixes: https://github.com/martinvonz/jj/issues/4784
jujutsu = {
url = "github:martinvonz/jj";
inputs.nixpkgs.follows = "nixpkgs";
};
# Ren and rep - CLI find and replace # Ren and rep - CLI find and replace
rep = { rep = {
url = "github:robenkleene/rep-grep"; url = "github:robenkleene/rep-grep";
@ -192,38 +174,26 @@
flake = false; flake = false;
}; };
gh-collaborators = {
url = "github:katiem0/gh-collaborators";
flake = false;
};
# Clipboard over SSH
osc = {
url = "github:theimpostor/osc/v0.4.6";
flake = false;
};
# Nextcloud Apps # Nextcloud Apps
nextcloud-news = { nextcloud-news = {
# https://github.com/nextcloud/news/releases # https://github.com/nextcloud/news/releases
url = "https://github.com/nextcloud/news/releases/download/25.0.0-alpha12/news.tar.gz"; url = "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 # https://github.com/nextcloud-releases/external/releases
url = "https://github.com/nextcloud-releases/external/releases/download/v5.5.2/external-v5.5.2.tar.gz"; url = "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/ # https://github.com/christianlupus-nextcloud/cookbook-releases/releases/
url = "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.2/cookbook-0.11.2.tar.gz"; url = "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.0/cookbook-0.11.0.tar.gz";
flake = false; flake = false;
}; };
nextcloud-snappymail = { nextcloud-snappymail = {
# https://github.com/the-djmaze/snappymail/releases # https://github.com/the-djmaze/snappymail/releases
# https://snappymail.eu/repository/nextcloud # https://snappymail.eu/repository/nextcloud
url = "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz"; url = "file+https://github.com/nmasur/snappymail-nextcloud/releases/download/v2.36.1/snappymail-2.36.1-nextcloud.tar.gz";
# url = "https://github.com/nmasur/snappymail-nextcloud/releases/download/v2.36.3/snappymail-2.36.3-nextcloud.tar.gz";
flake = false; flake = false;
}; };
}; };
@ -248,43 +218,36 @@
mail.smtpHost = "smtp.purelymail.com"; mail.smtpHost = "smtp.purelymail.com";
dotfilesRepo = "https://github.com/nmasur/dotfiles"; dotfilesRepo = "https://github.com/nmasur/dotfiles";
hostnames = { hostnames = {
audiobooks = "read.${baseName}";
budget = "money.${baseName}";
files = "files.${baseName}";
git = "git.${baseName}"; git = "git.${baseName}";
influxdb = "influxdb.${baseName}"; influxdb = "influxdb.${baseName}";
irc = "irc.${baseName}"; irc = "irc.${baseName}";
metrics = "metrics.${baseName}"; metrics = "metrics.${baseName}";
minecraft = "minecraft.${baseName}"; minecraft = "minecraft.${baseName}";
n8n = "n8n.${baseName}"; n8n = "n8n2.${baseName}";
notifications = "ntfy.${baseName}";
prometheus = "prom.${baseName}"; prometheus = "prom.${baseName}";
paperless = "paper.${baseName}"; paperless = "paper.${baseName}";
photos = "photos.${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}";
status = "status.${baseName}";
transmission = "transmission.${baseName}"; transmission = "transmission.${baseName}";
}; };
}; };
# Common overlays to always use # Common overlays to always use
overlays = [ overlays = [
inputs.nur.overlays.default inputs.nur.overlay
inputs.nix2vim.overlay inputs.nix2vim.overlay
inputs.jujutsu.overlays.default # Fix: https://github.com/martinvonz/jj/issues/4784
(import ./overlays/neovim-plugins.nix inputs) (import ./overlays/neovim-plugins.nix inputs)
(import ./overlays/calibre-web.nix)
(import ./overlays/disko.nix inputs)
(import ./overlays/tree-sitter.nix inputs) (import ./overlays/tree-sitter.nix inputs)
(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/gh-collaborators.nix inputs) (import ./overlays/gh-collaborators.nix)
(import ./overlays/osc.nix inputs)
(import ./overlays/ren-rep.nix inputs) (import ./overlays/ren-rep.nix inputs)
(import ./overlays/volnoti.nix)
]; ];
# System types to support. # System types to support.
@ -356,7 +319,6 @@
system = "x86_64-linux"; system = "x86_64-linux";
format = "iso"; format = "iso";
specialArgs = { specialArgs = {
pkgs-stable = import inputs.nixpkgs-stable { inherit system; };
pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; }; pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; };
}; };
modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; }; modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; };
@ -365,7 +327,6 @@
system = "x86_64-linux"; system = "x86_64-linux";
format = "amazon"; format = "amazon";
specialArgs = { specialArgs = {
pkgs-stable = import inputs.nixpkgs-stable { inherit system; };
pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; }; pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; };
}; };
modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; } ++ [ modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; } ++ [

View File

@ -17,7 +17,6 @@
inputs.nixpkgs.lib.nixosSystem rec { inputs.nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux"; system = "aarch64-linux";
specialArgs = { specialArgs = {
pkgs-stable = import inputs.nixpkgs-stable { inherit system; };
pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; }; pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; };
}; };
modules = [ modules = [
@ -62,7 +61,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
# Still require colors for programs like Neovim, K9S # Still require colors for programs like Neovim, K9S
theme = { theme = {
colors = (import ../../colorscheme/gruvbox-dark).dark; colors = (import ../../colorscheme/gruvbox).dark;
}; };
# Programs and services # Programs and services
@ -71,7 +70,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
dotfiles.enable = true; # Clone dotfiles dotfiles.enable = true; # Clone dotfiles
neovim.enable = true; neovim.enable = true;
giteaRunner.enable = true; giteaRunner.enable = true;
services.actualbudget.enable = true;
services.caddy.enable = true; services.caddy.enable = true;
services.grafana.enable = true; services.grafana.enable = true;
services.thelounge.enable = true; services.thelounge.enable = true;
@ -81,10 +79,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
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
services.n8n.enable = true;
services.ntfy-sh.enable = true;
services.postgresql.enable = true;
services.uptime-kuma.enable = true;
system.autoUpgrade.enable = true; system.autoUpgrade.enable = true;
# Allows private remote access over the internet # Allows private remote access over the internet

View File

@ -26,8 +26,7 @@ inputs.darwin.lib.darwinSystem {
inputs.mac-app-util.darwinModules.default inputs.mac-app-util.darwinModules.default
{ {
nixpkgs.overlays = [ inputs.firefox-darwin.overlay ] ++ overlays; nixpkgs.overlays = [ inputs.firefox-darwin.overlay ] ++ overlays;
networking.hostName = "NYCM-NMASUR2"; networking.hostName = "lookingglass";
networking.computerName = "NYCM-NMASUR2";
identityFile = "/Users/Noah.Masur/.ssh/id_ed25519"; identityFile = "/Users/Noah.Masur/.ssh/id_ed25519";
gui.enable = true; gui.enable = true;
theme = { theme = {
@ -35,6 +34,7 @@ inputs.darwin.lib.darwinSystem {
dark = true; dark = true;
}; };
mail.user = globals.user; mail.user = globals.user;
mole.enable = true;
atuin.enable = true; atuin.enable = true;
charm.enable = true; charm.enable = true;
neovim.enable = true; neovim.enable = true;
@ -54,7 +54,6 @@ inputs.darwin.lib.darwinSystem {
_1password.enable = true; _1password.enable = true;
slack.enable = true; slack.enable = true;
wezterm.enable = true; wezterm.enable = true;
yt-dlp.enable = true;
} }
]; ];
} }

View File

@ -11,7 +11,6 @@
inputs.nixpkgs.lib.nixosSystem rec { inputs.nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = { specialArgs = {
pkgs-stable = import inputs.nixpkgs-stable { inherit system; };
pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; }; pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; };
}; };
modules = [ modules = [
@ -67,14 +66,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; }); devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; });
}; };
zramSwap.enable = true;
swapDevices = [
{
device = "/swapfile";
size = 4 * 1024; # 4 GB
}
];
boot.zfs = { boot.zfs = {
# Automatically load the ZFS pool on boot # Automatically load the ZFS pool on boot
extraPools = [ "tank" ]; extraPools = [ "tank" ];
@ -105,11 +96,8 @@ inputs.nixpkgs.lib.nixosSystem rec {
cloudflare.enable = true; cloudflare.enable = true;
dotfiles.enable = true; dotfiles.enable = true;
arrs.enable = true; arrs.enable = true;
filebrowser.enable = true;
services.audiobookshelf.enable = true;
services.bind.enable = true; services.bind.enable = true;
services.caddy.enable = true; services.caddy.enable = true;
services.immich.enable = true;
services.jellyfin.enable = true; services.jellyfin.enable = true;
services.nextcloud.enable = true; services.nextcloud.enable = true;
services.calibre-web.enable = true; services.calibre-web.enable = true;
@ -134,7 +122,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
endpoint = "s3.us-west-002.backblazeb2.com"; endpoint = "s3.us-west-002.backblazeb2.com";
bucket = "noahmasur-backup"; bucket = "noahmasur-backup";
accessKeyId = "0026b0e73b2e2c80000000005"; accessKeyId = "0026b0e73b2e2c80000000005";
glacierBucket = "noahmasur-archive";
}; };
# Disable passwords, only use SSH key # Disable passwords, only use SSH key

View File

@ -8,12 +8,8 @@
... ...
}: }:
inputs.nixpkgs.lib.nixosSystem rec { inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = {
pkgs-stable = import inputs.nixpkgs-stable { inherit system; };
pkgs-caddy = import inputs.nixpkgs-caddy { inherit system; };
};
modules = [ modules = [
globals globals
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
@ -41,12 +37,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
services.xserver.videoDrivers = [ "amdgpu" ]; services.xserver.videoDrivers = [ "amdgpu" ];
# I don't think I need this?
# boot.kernelParams = [
# "video=DP-0:2560x1440@165"
# "video=DP-1:1920x1080@60"
# ];
# Required binary blobs to boot on this machine # Required binary blobs to boot on this machine
hardware.enableRedistributableFirmware = true; hardware.enableRedistributableFirmware = true;
@ -128,7 +118,6 @@ inputs.nixpkgs.lib.nixosSystem rec {
dwarf-fortress.enable = true; dwarf-fortress.enable = true;
enable = true; enable = true;
steam.enable = true; steam.enable = true;
moonlight.enable = true;
legendary.enable = true; legendary.enable = true;
lutris.enable = true; lutris.enable = true;
ryujinx.enable = true; ryujinx.enable = true;

View File

@ -22,9 +22,10 @@
"1password-cli" "1password-cli"
]; ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
home.packages = [ home.packages = with pkgs; [
pkgs._1password-cli _1password-gui
] ++ (if pkgs.stdenv.isLinux then [ pkgs._1password-gui ] else [ ]); _1password
];
}; };
# https://1password.community/discussion/135462/firefox-extension-does-not-connect-to-linux-app # https://1password.community/discussion/135462/firefox-extension-does-not-connect-to-linux-app

View File

@ -8,6 +8,7 @@
./firefox.nix ./firefox.nix
./kitty.nix ./kitty.nix
./media.nix ./media.nix
./mole.nix
./obsidian.nix ./obsidian.nix
./qbittorrent.nix ./qbittorrent.nix
./slack.nix ./slack.nix

View File

@ -71,8 +71,6 @@
"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 "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
"browser.tabs.hoverPreview.enabled" = false; # Disable tab previews
"browser.tabs.hoverPreview.showThumbnails" = false; # Disable tab previews
}; };
userChrome = '' userChrome = ''
:root { :root {
@ -159,15 +157,6 @@
}; };
}; };
# Mimic nixpkgs package environment for read-only profiles.ini management
# From: https://github.com/booxter/home-manager/commit/dd1602e306fec366280f5953c5e1b553e3d9672a
home.sessionVariables = {
MOZ_LEGACY_PROFILES = 1;
MOZ_ALLOW_DOWNGRADE = 1;
};
# launchd.user.envVariables = config.home-manager.users.${config.user}.home.sessionVariables;
xdg.mimeApps = { xdg.mimeApps = {
associations.added = { associations.added = {
"text/html" = [ "firefox.desktop" ]; "text/html" = [ "firefox.desktop" ];

View File

@ -34,13 +34,10 @@
programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux (lib.mkDefault "${pkgs.kitty}/bin/kitty"); programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux (lib.mkDefault "${pkgs.kitty}/bin/kitty");
# Display images in the terminal # Display images in the terminal
programs.fish.interactiveShellInit = # fish programs.fish.shellAliases = {
'' icat = "kitty +kitten icat";
if test "$TERM" = "xterm-kitty" ssh = "kitty +kitten ssh";
alias icat="kitty +kitten icat" };
alias ssh="kitty +kitten ssh"
end
'';
programs.kitty = { programs.kitty = {
enable = true; enable = true;

View File

@ -0,0 +1,110 @@
{
config,
pkgs,
lib,
...
}:
let
# Build kdl-py
kdl-py = pkgs.python311.pkgs.buildPythonPackage rec {
pname = "kdl-py";
version = "1.2.0";
pyproject = true;
src = pkgs.fetchPypi {
inherit pname version;
hash = "sha256-Y/P0bGJ33trc5E3PyUZyv25r8zMLkBIuATTCKFfimXM=";
};
build-system = [ pkgs.python311.pkgs.setuptools ];
# has no tests
doCheck = false;
};
mole = pkgs.python311.pkgs.buildPythonPackage rec {
pname = "mole";
version = "0.7.1";
pyproject = true;
src = pkgs.fetchFromGitHub {
owner = "eblume";
repo = pname;
rev = "30bb052a97050b1fa89c287855d834f7952b195a";
sha256 = "sha256-DUWsfyICCfFQ2ZQBYSQVoA3eLdKC8djUylKgGdHIyJo=";
};
patches = [
(builtins.toString (
pkgs.writeText "pyproject.toml.patch" ''
diff --git a/pyproject.toml b/pyproject.toml
index 12ce0f5..787e978 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,11 +12,11 @@ packages = [
[tool.poetry.dependencies]
python = "^3.11"
# Now back to the regular dependencies
-typer = {extras = ["all"], version = "^0.9"}
+typer = {extras = ["all"], version = "^0.12"}
todoist-api-python = "^2.1.3"
openai = "^1.2.4"
rich = "^13.4.2"
-watchdog = "^3.0.0"
+watchdog = "^4.0.0"
pydub = "^0.25.1"
requests = "^2.31.0"
pyyaml = "^6.0.1"
''
))
];
# Used during build time
nativeBuildInputs = [ pkgs.python311Packages.poetry-core ];
# Used during run time
buildInputs = [
pkgs._1password
pkgs.nb-cli
];
# Both build and run time
propagatedBuildInputs = [
pkgs.python311Packages.typer
pkgs.python311Packages.todoist-api-python
pkgs.python311Packages.openai
pkgs.python311Packages.rich
pkgs.python311Packages.watchdog
pkgs.python311Packages.pydub
pkgs.python311Packages.requests
pkgs.python311Packages.pyyaml
pkgs.python311Packages.pydantic
pkgs.python311Packages.pendulum
kdl-py
pkgs.ffmpeg
];
build-system = [ pkgs.python311.pkgs.setuptools ];
# has no tests
doCheck = false;
};
in
{
options = {
mole = {
enable = lib.mkEnableOption {
description = "Enable Mole.";
default = false;
};
};
};
config = lib.mkIf config.mole.enable {
home-manager.users.${config.user} = {
home.packages = [ mole ];
};
};
}

View File

@ -23,6 +23,6 @@
# Broken on 2023-12-11 # Broken on 2023-12-11
# https://forum.obsidian.md/t/electron-25-is-now-eol-please-upgrade-to-a-newer-version/72878/8 # https://forum.obsidian.md/t/electron-25-is-now-eol-please-upgrade-to-a-newer-version/72878/8
insecurePackages = [ "electron-25.9.0" ]; nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
}; };
} }

View File

@ -21,6 +21,4 @@
home.packages = with pkgs; [ slack ]; home.packages = with pkgs; [ slack ];
}; };
}; };
# Theme string: #1D2122,#665C54,#8EC07C,#BDAE93
} }

View File

@ -29,14 +29,14 @@
sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm"; sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm";
}; };
terminal = "${pkgs.wezterm}/bin/wezterm";
terminalLaunchCommand = "${config.terminal} start --";
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
# Set the i3 terminal # Set the i3 terminal
xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm"; xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm";
# Set the Rofi terminal for running programs
programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux "${pkgs.wezterm}/bin/wezterm";
# Display images in the terminal # Display images in the terminal
programs.fish.shellAliases = { programs.fish.shellAliases = {
icat = lib.mkForce "wezterm imgcat"; icat = lib.mkForce "wezterm imgcat";
@ -102,183 +102,132 @@
}; };
}; };
extraConfig = '' extraConfig = ''
local wezterm = require("wezterm") return {
local config = wezterm.config_builder() color_scheme = "myTheme",
config.check_for_updates = false
config.color_scheme = "myTheme"
-- Scrollback -- Scrollback
config.scrollback_lines = 10000 scrollback_lines = 10000,
-- Window -- Window
config.window_padding = { window_padding = {
left = 10, left = 10,
right = 10, right = 10,
top = 10, top = 10,
bottom = 12, bottom = 10,
}
config.font = wezterm.font('${font}', { weight = 'Bold'})
config.font_size = ${if pkgs.stdenv.isLinux then "14.0" else "18.0"}
-- Fix color blocks instead of text
config.front_end = "WebGpu"
-- Tab Bar
config.hide_tab_bar_if_only_one_tab = true
config.window_frame = {
font = wezterm.font('${font}', { weight = 'Bold'}),
font_size = ${if pkgs.stdenv.isLinux then "12.0" else "16.0"},
}
config.colors = {
tab_bar = {
active_tab = {
bg_color = '${config.theme.colors.base00}',
fg_color = '${config.theme.colors.base04}',
}, },
},
}
-- Disable audio font = wezterm.font('${font}', { weight = 'Bold'}),
config.audible_bell = "Disabled" font_size = ${if pkgs.stdenv.isLinux then "14.0" else "18.0"},
config.initial_rows = 80 -- Tab Bar
config.initial_cols = 200 hide_tab_bar_if_only_one_tab = true,
window_frame = {
config.unix_domains = { font = wezterm.font('${font}', { weight = 'Bold'}),
{ font_size = ${if pkgs.stdenv.isLinux then "12.0" else "16.0"},
name = 'unix',
},
}
-- This causes `wezterm` to act as though it was started as
-- `wezterm connect unix` by default, connecting to the unix
-- domain on startup.
-- If you prefer to connect manually, leave out this line.
config.default_gui_startup_args = { 'connect', 'unix' }
config.leader = {
key = 'a',
mods = 'CTRL',
timeout_milliseconds = 2000,
}
config.keys = {
-- Attach to muxer
{
key = 'a',
mods = 'LEADER',
action = wezterm.action.AttachDomain 'unix',
},
-- Detach from muxer
{
key = 'd',
mods = 'LEADER',
action = wezterm.action.DetachDomain { DomainName = 'unix' },
},
-- sends completion string for fish autosuggestions
{
key = 'Enter',
mods = 'SHIFT',
action = wezterm.action.SendString '\x1F'
},
-- ctrl-shift-h was "hide"
{
key = 'H',
mods = 'SHIFT|CTRL',
action = wezterm.action.DisableDefaultAssignment
},
-- alt-enter was "fullscreen"
{
key = 'Enter',
mods = 'ALT',
action = wezterm.action.DisableDefaultAssignment
},
-- make super-f "fullscreen"
{
key = 'f',
mods = 'SUPER',
action = wezterm.action.ToggleFullScreen
},
-- super-t open new tab in new dir
{
key = 't',
mods = ${if pkgs.stdenv.isDarwin then "'SUPER'" else "'ALT'"},
action = wezterm.action.SpawnCommandInNewTab {
cwd = wezterm.home_dir,
}, },
},
-- shift-super-t open new tab in same dir
{
key = 't',
mods = 'SUPER|SHIFT',
action = wezterm.action.SpawnTab 'CurrentPaneDomain'
},
-- project switcher
{
key = 'P',
mods = 'SUPER',
action = wezterm.action_callback(function(window, pane)
local choices = {}
wezterm.log_info "working?" colors = {
tab_bar = {
active_tab = {
bg_color = '${config.theme.colors.base00}',
fg_color = '${config.theme.colors.base04}',
},
},
},
function scandir(directory) -- Disable audio
local i, t, popen = 0, {}, io.popen audible_bell = "Disabled",
local pfile = popen('${pkgs.fd}/bin/fd --search-path "'..directory..'" --type directory --exact-depth 2 | ${pkgs.proximity-sort}/bin/proximity-sort "'..os.getenv("HOME").."/dev/work"..'"')
for filename in pfile:lines() do initial_rows = 80,
i = i + 1 initial_cols = 200,
t[i] = filename
keys = {
-- sends completion string for fish autosuggestions
{
key = 'Enter',
mods = 'SHIFT',
action = wezterm.action.SendString '\x1F'
},
-- ctrl-shift-h was "hide"
{
key = 'H',
mods = 'SHIFT|CTRL',
action = wezterm.action.DisableDefaultAssignment
},
-- alt-enter was "fullscreen"
{
key = 'Enter',
mods = 'ALT',
action = wezterm.action.DisableDefaultAssignment
},
-- make super-f "fullscreen"
{
key = 'f',
mods = 'SUPER',
action = wezterm.action.ToggleFullScreen
},
-- super-t open new tab in new dir
{
key = 't',
mods = 'SUPER',
action = wezterm.action.SpawnCommandInNewTab {
cwd = wezterm.home_dir,
},
},
-- shift-super-t open new tab in same dir
{
key = 't',
mods = 'SUPER|SHIFT',
action = wezterm.action.SpawnTab 'CurrentPaneDomain'
},
-- project switcher
{
key = 'P',
mods = 'SUPER',
action = wezterm.action_callback(function(window, pane)
local choices = {}
wezterm.log_info "working?"
function scandir(directory)
local i, t, popen = 0, {}, io.popen
local pfile = popen('${pkgs.fd}/bin/fd --search-path "'..directory..'" --type directory --exact-depth 2 | ${pkgs.proximity-sort}/bin/proximity-sort "'..os.getenv("HOME").."/dev/work"..'"')
for filename in pfile:lines() do
i = i + 1
t[i] = filename
end
pfile:close()
return t
end end
pfile:close()
return t
end
for _, v in pairs(scandir(os.getenv("HOME").."/dev")) do for _, v in pairs(scandir(os.getenv("HOME").."/dev")) do
table.insert(choices, { label = v }) table.insert(choices, { label = v })
end end
window:perform_action( window:perform_action(
wezterm.action.InputSelector { wezterm.action.InputSelector {
action = wezterm.action_callback(function(window, pane, id, label) action = wezterm.action_callback(function(window, pane, id, label)
if not id and not label then if not id and not label then
wezterm.log_info "cancelled" wezterm.log_info "cancelled"
else else
window:perform_action( window:perform_action(
wezterm.action.SpawnCommandInNewTab { wezterm.action.SpawnCommandInNewTab {
cwd = label, cwd = label,
}, },
pane pane
) )
end end
end), end),
fuzzy = true, fuzzy = true,
title = "Select Project", title = "Select Project",
choices = choices, choices = choices,
}, },
pane pane
) )
end), end),
}, },
},
} }
-- print the workspace name at the upper right
wezterm.on("update-right-status", function(window, pane)
window:set_right_status(window:active_workspace())
end)
-- load plugin
local workspace_switcher = wezterm.plugin.require("https://github.com/MLFlexer/smart_workspace_switcher.wezterm")
-- set path to zoxide
workspace_switcher.zoxide_path = "${pkgs.zoxide}/bin/zoxide"
-- keymaps
table.insert(config.keys, { key = "s", mods = "CTRL|SHIFT", action = workspace_switcher.switch_workspace() })
-- table.insert(config.keys, { key = "t", mods = "CTRL|SHIFT", action = wezterm.action.ShowLauncherArgs({ flags = "FUZZY|WORKSPACES" }) })
table.insert(config.keys, { key = "[", mods = "CTRL|SHIFT", action = wezterm.action.SwitchWorkspaceRelative(1) })
table.insert(config.keys, { key = "]", mods = "CTRL|SHIFT", action = wezterm.action.SwitchWorkspaceRelative(-1) })
return config
''; '';
}; };
}; };

View File

@ -76,24 +76,7 @@
description = "List of unfree packages to allow."; description = "List of unfree packages to allow.";
default = [ ]; default = [ ];
}; };
insecurePackages = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "List of insecure packages to allow.";
default = [ ];
};
hostnames = { hostnames = {
audiobooks = lib.mkOption {
type = lib.types.str;
description = "Hostname for audiobook server (Audiobookshelf).";
};
budget = lib.mkOption {
type = lib.types.str;
description = "Hostname for budgeting server (ActualBudget).";
};
files = lib.mkOption {
type = lib.types.str;
description = "Hostname for files server (Filebrowser).";
};
git = lib.mkOption { git = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for git server (Gitea)."; description = "Hostname for git server (Gitea).";
@ -110,10 +93,6 @@
type = lib.types.str; type = lib.types.str;
description = "Hostname for document server (paperless-ngx)."; description = "Hostname for document server (paperless-ngx).";
}; };
photos = lib.mkOption {
type = lib.types.str;
description = "Hostname for photo management (Immich).";
};
prometheus = lib.mkOption { prometheus = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for Prometheus server."; description = "Hostname for Prometheus server.";
@ -150,14 +129,6 @@
type = lib.types.str; type = lib.types.str;
description = "Hostname for n8n automation."; description = "Hostname for n8n automation.";
}; };
notifications = lib.mkOption {
type = lib.types.str;
description = "Hostname for push notification services (ntfy).";
};
status = lib.mkOption {
type = lib.types.str;
description = "Hostname for status page (Uptime-Kuma).";
};
transmission = lib.mkOption { transmission = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for peer2peer downloads (Transmission)."; description = "Hostname for peer2peer downloads (Transmission).";
@ -190,9 +161,6 @@
# Retrieves package object based on string name # Retrieves package object based on string name
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.unfreePackages; nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.unfreePackages;
# Allow specified insecure packages (identified elsewhere)
nixpkgs.config.permittedInsecurePackages = config.insecurePackages;
# Pin a state version to prevent warnings # Pin a state version to prevent warnings
home-manager.users.${config.user}.home.stateVersion = stateVersion; home-manager.users.${config.user}.home.stateVersion = stateVersion;
home-manager.users.root.home.stateVersion = stateVersion; home-manager.users.root.home.stateVersion = stateVersion;

View File

@ -169,8 +169,7 @@
filters = { filters = {
"text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize"; "text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
"text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/libexec/aerc/filters/calendar"; "text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/libexec/aerc/filters/calendar";
"text/html" = "text/html" = "${pkgs.aerc}/libexec/aerc/filters/html | ${pkgs.aerc}/libexec/aerc/filters/colorize"; # Requires w3m, dante
"${pkgs.aerc}/libexec/aerc/filters/html | ${pkgs.aerc}/libexec/aerc/filters/colorize"; # Requires w3m, dante
# "text/*" = # "text/*" =
# ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "''; # ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
"message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize"; "message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
@ -191,25 +190,26 @@
}; };
}; };
xdg.desktopEntries.aerc = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) { xdg.desktopEntries.aerc = lib.mkIf pkgs.stdenv.isLinux {
name = "aerc"; name = "aerc";
exec = "${config.terminalLaunchCommand} aerc %u"; exec = "kitty aerc %u";
}; };
xsession.windowManager.i3.config.keybindings = lib.mkIf pkgs.stdenv.isLinux { xsession.windowManager.i3.config.keybindings = lib.mkIf pkgs.stdenv.isLinux {
"${config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier}+Shift+e" = "${
"exec ${ config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier
# Don't name the script `aerc` or it will affect grep }+Shift+e" = "exec ${
builtins.toString ( # Don't name the script `aerc` or it will affect grep
pkgs.writeShellScript "focus-mail.sh" '' builtins.toString (
count=$(ps aux | grep -c aerc) pkgs.writeShellScript "focus-mail.sh" ''
if [ "$count" -eq 1 ]; then count=$(ps aux | grep -c aerc)
i3-msg "exec --no-startup-id ${config.terminal} start --class aerc -- aerc" if [ "$count" -eq 1 ]; then
sleep 0.25 i3-msg "exec --no-startup-id kitty --class aerc aerc"
fi sleep 0.25
i3-msg "[class=aerc] focus" fi
'' i3-msg "[class=aerc] focus"
) ''
}"; )
}";
}; };
programs.fish.shellAbbrs = { programs.fish.shellAbbrs = {

View File

@ -6,7 +6,6 @@
plugins = [ plugins = [
pkgs.vimPlugins.bufferline-nvim pkgs.vimPlugins.bufferline-nvim
pkgs.vimPlugins.vim-bbye # Better closing of buffers pkgs.vimPlugins.vim-bbye # Better closing of buffers
pkgs.vimPlugins.snipe-nvim # Jump between open buffers
]; ];
setup.bufferline = { setup.bufferline = {
options = { options = {
@ -16,7 +15,6 @@
offsets = [ { filetype = "NvimTree"; } ]; offsets = [ { filetype = "NvimTree"; } ];
}; };
}; };
setup.snipe = { };
lua = '' lua = ''
-- Move buffers -- Move buffers
vim.keymap.set("n", "L", ":BufferLineCycleNext<CR>", { silent = true }) vim.keymap.set("n", "L", ":BufferLineCycleNext<CR>", { silent = true })
@ -24,7 +22,5 @@
-- Kill buffer -- Kill buffer
vim.keymap.set("n", "<Leader>x", " :Bdelete<CR>", { silent = true }) vim.keymap.set("n", "<Leader>x", " :Bdelete<CR>", { silent = true })
'';
-- Jump to buffer
vim.keymap.set("n", "gb", require("snipe").open_buffer_menu, { silent = true }) '';
} }

View File

@ -2,7 +2,6 @@
{ {
plugins = [ plugins = [
pkgs.vimPlugins.nvim-cmp
pkgs.vimPlugins.cmp-nvim-lsp pkgs.vimPlugins.cmp-nvim-lsp
pkgs.vimPlugins.cmp-buffer pkgs.vimPlugins.cmp-buffer
pkgs.vimPlugins.cmp-path pkgs.vimPlugins.cmp-path
@ -27,21 +26,15 @@
# Basic completion keybinds # Basic completion keybinds
mapping = { mapping = {
"['<C-n>']" = "['<C-n>']" = dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })"; "['<C-p>']" = dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
"['<C-p>']" = "['<Down>']" = dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })"; "['<Up>']" = dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
"['<Down>']" =
dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
"['<Up>']" =
dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
"['<C-d>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(-4)"; "['<C-d>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(-4)";
"['<C-f>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(4)"; "['<C-f>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(4)";
"['<C-e>']" = dsl.rawLua "require('cmp').mapping.abort()"; "['<C-e>']" = dsl.rawLua "require('cmp').mapping.abort()";
"['<C-y>']" = "['<C-y>']" = dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Insert, select = true, }, { 'i', 'c' })";
dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Insert, select = true, }, { 'i', 'c' })"; "['<C-r>']" = dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Replace, select = true, }, { 'i', 'c' })";
"['<C-r>']" =
dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Replace, select = true, }, { 'i', 'c' })";
"['<Esc>']" = dsl.rawLua '' "['<Esc>']" = dsl.rawLua ''
function(_) function(_)
cmp.mapping({ cmp.mapping({
@ -135,7 +128,7 @@
}; };
}; };
lua' = '' lua = ''
-- Use buffer source for `/` -- Use buffer source for `/`
require('cmp').setup.cmdline("/", { require('cmp').setup.cmdline("/", {
mapping = { mapping = {

View File

@ -19,11 +19,9 @@
pkgs.vimPlugins.fidget-nvim pkgs.vimPlugins.fidget-nvim
pkgs.vimPlugins.nvim-lint pkgs.vimPlugins.nvim-lint
pkgs.vimPlugins.vim-table-mode pkgs.vimPlugins.vim-table-mode
pkgs.vimPlugins.tiny-inline-diagnostic-nvim
]; ];
setup.fidget = { }; setup.fidget = { };
setup.tiny-inline-diagnostic = { };
use.lspconfig.lua_ls.setup = dsl.callWith { use.lspconfig.lua_ls.setup = dsl.callWith {
settings = { settings = {
@ -73,9 +71,6 @@
files = { files = {
excludeDirs = [ ".direnv" ]; excludeDirs = [ ".direnv" ];
}; };
cargo = {
features = "all";
};
}; };
}; };
}; };
@ -138,9 +133,6 @@
-- Prevent infinite log size (change this when debugging) -- Prevent infinite log size (change this when debugging)
vim.lsp.set_log_level("off") vim.lsp.set_log_level("off")
-- Hide buffer diagnostics (use tiny-inline-diagnostic.nvim instead)
vim.diagnostic.config({ virtual_text = false })
''; '';
}; };
} }

View File

@ -10,8 +10,7 @@
pkgs.vimPlugins.vim-eunuch # File manipulation commands pkgs.vimPlugins.vim-eunuch # File manipulation commands
pkgs.vimPlugins.vim-fugitive # Git commands pkgs.vimPlugins.vim-fugitive # Git commands
pkgs.vimPlugins.vim-repeat # Better repeat using . pkgs.vimPlugins.vim-repeat # Better repeat using .
pkgs.vimPlugins.vim-abolish # Keep capitalization in substitute (Subvert) pkgs.vimPlugins.glow-nvim # Markdown preview popup
pkgs.vimPlugins.markview-nvim # Markdown preview
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
]; ];
@ -22,7 +21,7 @@
names = false; names = false;
}; };
}; };
setup.markview = { }; setup.glow = { };
setup.which-key = { }; setup.which-key = { };
vim.o = { vim.o = {
@ -58,8 +57,8 @@
# Better backup, swap and undo storage # Better backup, swap and undo storage
vim.o.backup = true; # Easier to recover and more secure vim.o.backup = true; # Easier to recover and more secure
vim.opt.undofile = true; # Keeps undos after quit vim.bo.swapfile = false; # Instead of swaps, create backups
vim.opt.swapfile = false; # Instead of swaps, create backups vim.bo.undofile = true; # Keeps undos after quit
vim.o.backupdir = dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/backup//")''; vim.o.backupdir = dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/backup//")'';
vim.o.undodir = dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/undo//")''; vim.o.undodir = dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/undo//")'';

View File

@ -21,7 +21,7 @@ function TERM_TOGGLE()
basicterminal:toggle() basicterminal:toggle()
end end
local nixpkgs = terminal:new({ cmd = "nix repl --expr 'import <nixpkgs>{}'" }) local nixpkgs = terminal:new({ cmd = "nix repl '<nixpkgs>'" })
function NIXPKGS_TOGGLE() function NIXPKGS_TOGGLE()
nixpkgs:toggle() nixpkgs:toggle()
end end

View File

@ -14,6 +14,11 @@
open_mapping = dsl.rawLua "[[<c-\\>]]"; open_mapping = dsl.rawLua "[[<c-\\>]]";
hide_numbers = true; hide_numbers = true;
direction = "float"; direction = "float";
float_opts = {
width = dsl.rawLua "vim.o.columns - 4";
height = dsl.rawLua "vim.o.lines - 4";
row = 0;
};
}; };
lua = '' lua = ''

View File

@ -50,9 +50,9 @@ in
# 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)
xdg.desktopEntries.nvim = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) { xdg.desktopEntries.nvim = lib.mkIf pkgs.stdenv.isLinux {
name = "Neovim wrapper"; name = "Neovim wrapper";
exec = "${config.home-manager.users.${config.user}.programs.rofi.terminal} nvim %F"; exec = "kitty nvim %F";
mimeType = [ mimeType = [
"text/plain" "text/plain"
"text/markdown" "text/markdown"

View File

@ -71,8 +71,8 @@ key("n", "co", ":copen<CR>")
key("n", "cq", ":cclose<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
key("v", "<C-r>", "y<Esc>:%s/<C-r>+//gc<left><left><left>") --- Substitute selected key("v", "<C-r>", "y<Esc>:%s/<C-r>+//gc<left><left><left>") --- Substitute selected
key("v", "D", "y'>gp") --- Duplicate selected key("v", "D", "y'>gp") --- Duplicate selected
key("x", "<Leader>p", '"_dP') --- Paste but keep register key("x", "<Leader>p", '"_dP') --- Paste but keep register

View File

@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Adapted from: https://gist.github.com/reegnz/b9e40993d410b75c2d866441add2cb55
if [[ -z $1 ]] || [[ $1 == "-" ]]; then
input=$(mktemp)
trap 'rm -f $input' EXIT
cat /dev/stdin >"$input"
else
input=$1
fi
echo '' |
fzf --phony \
--height 100% \
--preview-window='up:80%' \
--query '.' \
--print-query \
--header $'CTRL-O: jq output\nCTRL-Y: copy output\nALT-Y: copy query' \
--preview "jq --color-output -r {q} $input" \
--bind "ctrl-o:execute(jq -r {q} $input)+clear-query+accept" \
--bind "alt-y:execute(echo {q} | pbcopy)" \
--bind "ctrl-y:execute(jq -r {q} $input | pbcopy)"

View File

@ -6,15 +6,14 @@ BUCKET_NAME_PART_1="t2"
BUCKET_NAME_PART_2="global" BUCKET_NAME_PART_2="global"
BUCKET_NAME_PART_3="terraformstate" BUCKET_NAME_PART_3="terraformstate"
PROJECT_ROOT=$(git rev-parse --show-toplevel) WORKFLOW_FILE=".github/workflows/terraform.yml"
WORKFLOW_FILE="${PROJECT_ROOT}/.github/workflows/terraform.yml"
if [ ! -f "$WORKFLOW_FILE" ]; then if [ ! -f $WORKFLOW_FILE ]; then
WORKFLOW_FILE="${PROJECT_ROOT}/.github/workflows/apply.yml" WORKFLOW_FILE=".github/workflows/apply.yml"
fi fi
AWS_ACCOUNT_NUMBER=$( AWS_ACCOUNT_NUMBER=$(
awk '/aws_account_number: .*/ {print $2}' "$WORKFLOW_FILE" | # Grab account number awk '/aws_account_number: .*/ {print $2}' $WORKFLOW_FILE | # Grab account number
echo "$( echo "$(
read -r s read -r s
s=${s//\'/} s=${s//\'/}
@ -24,7 +23,7 @@ AWS_ACCOUNT_NUMBER=$(
if [ -z "${AWS_ACCOUNT_NUMBER}" ]; then if [ -z "${AWS_ACCOUNT_NUMBER}" ]; then
AWS_ACCOUNT_NUMBER=$( AWS_ACCOUNT_NUMBER=$(
awk '/AWS_ACCOUNT_NUMBER: .*/ {print $2}' "$WORKFLOW_FILE" | # Grab account number awk '/AWS_ACCOUNT_NUMBER: .*/ {print $2}' $WORKFLOW_FILE | # Grab account number
echo "$( echo "$(
read -r s read -r s
s=${s//\'/} s=${s//\'/}

View File

@ -76,10 +76,6 @@
description = "Full git commit on notes"; description = "Full git commit on notes";
body = builtins.readFile ./functions/syncnotes.fish; body = builtins.readFile ./functions/syncnotes.fish;
}; };
_which = {
description = "Identify the path to a program in the shell";
body = "command --search (string sub --start=2 $argv)";
};
}; };
interactiveShellInit = '' interactiveShellInit = ''
fish_vi_key_bindings fish_vi_key_bindings
@ -105,18 +101,10 @@
"-" = "cd -"; "-" = "cd -";
mkd = "mkdir -pv"; mkd = "mkdir -pv";
# Convert a program into its full path
"=" = {
position = "anywhere";
regex = "=\\w+";
function = "_which";
};
# System # System
s = "sudo"; s = "sudo";
sc = "systemctl"; sc = "systemctl";
scs = "systemctl status"; scs = "systemctl status";
sca = "systemctl cat";
m = "make"; m = "make";
t = "trash"; t = "trash";

View File

@ -1,4 +1,4 @@
set vimfile (fzf) set vimfile (fzf)
and set vimfile (echo $vimfile | tr -d '\r') and set vimfile (echo $vimfile | tr -d '\r')
and commandline -r "vim \"$vimfile\"" and commandline -r "vim $vimfile"
and commandline -f execute and commandline -f execute

View File

@ -41,16 +41,5 @@
FZF_CTRL_T_COMMAND = fzfCommand; FZF_CTRL_T_COMMAND = fzfCommand;
FZF_DEFAULT_OPTS = "-m --height 50% --border"; FZF_DEFAULT_OPTS = "-m --height 50% --border";
}; };
home.packages = [
(pkgs.writeShellApplication {
name = "jqr";
runtimeInputs = [
pkgs.jq
pkgs.fzf
];
text = builtins.readFile ./bash/scripts/jqr.sh;
})
];
}; };
} }

View File

@ -113,11 +113,6 @@ in
gpd = "git push origin -d"; gpd = "git push origin -d";
gbd = "git branch -d"; gbd = "git branch -d";
gbD = "git branch -D"; gbD = "git branch -D";
gdd = {
position = "anywhere";
setCursor = true;
expansion = "BRANCH=% git push origin -d $BRANCH and git branch -d $BRANCH";
};
gr = "git reset"; gr = "git reset";
grh = "git reset --hard"; grh = "git reset --hard";
gm = "git merge"; gm = "git merge";
@ -163,13 +158,6 @@ in
and git branch -D $branch and git branch -D $branch
''; '';
}; };
git-delete-both = {
argumentNames = "branch";
body = ''
git push origin -d $branch
git branch -d $branch
'';
};
git-merge-fuzzy = { git-merge-fuzzy = {
body = '' body = ''
set branch (git-fuzzy-branch "merge from...") set branch (git-fuzzy-branch "merge from...")

View File

@ -6,8 +6,6 @@
}: }:
{ {
unfreePackages = [ "gh-copilot" ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
programs.gh = lib.mkIf config.home-manager.users.${config.user}.programs.git.enable { programs.gh = lib.mkIf config.home-manager.users.${config.user}.programs.git.enable {
@ -17,7 +15,6 @@
extensions = [ extensions = [
pkgs.gh-collaborators pkgs.gh-collaborators
pkgs.gh-dash pkgs.gh-dash
pkgs.gh-copilot
]; ];
}; };
@ -57,7 +54,7 @@
esac esac
selected=$(gh repo list "$organization" \ selected=$(gh repo list "$organization" \
--limit 1000 \ --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' \

View File

@ -13,18 +13,12 @@
ns = "nix-shell -p"; ns = "nix-shell -p";
nsf = "nix-shell --run fish -p"; nsf = "nix-shell --run fish -p";
nsr = "nix-shell-run"; nsr = "nix-shell-run";
nps = "nix repl --expr 'import <nixpkgs>{}'"; nps = "nix repl '<nixpkgs>'";
nixo = "man configuration.nix"; nixo = "man configuration.nix";
nixh = "man home-configuration.nix"; nixh = "man home-configuration.nix";
nr = { nr = "rebuild-nixos";
function = "rebuild-nixos"; nro = "rebuild-nixos offline";
}; hm = "rebuild-home";
nro = {
function = "rebuild-nixos-offline";
};
hm = {
function = "rebuild-home";
};
}; };
functions = { functions = {
nix-shell-run = { nix-shell-run = {
@ -48,20 +42,19 @@
}; };
rebuild-nixos = { rebuild-nixos = {
body = '' body = ''
if test "$argv[1]" = "offline"
set option "--option substitute false"
end
git -C ${config.dotfilesPath} add --intent-to-add --all git -C ${config.dotfilesPath} add --intent-to-add --all
echo "doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName}" commandline -r "doas nixos-rebuild switch $option --flake ${config.dotfilesPath}#${config.networking.hostName}"
''; commandline --function execute
};
rebuild-nixos-offline = {
body = ''
git -C ${config.dotfilesPath} add --intent-to-add --all
echo "doas nixos-rebuild switch --option substitute false --flake ${config.dotfilesPath}#${config.networking.hostName}"
''; '';
}; };
rebuild-home = { rebuild-home = {
body = '' body = ''
git -C ${config.dotfilesPath} add --intent-to-add --all git -C ${config.dotfilesPath} add --intent-to-add --all
echo "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName}"; commandline -r "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName}";
commandline --function execute
''; '';
}; };
}; };
@ -98,6 +91,12 @@
# Set channel to flake packages, used for nix-shell commands # Set channel to flake packages, used for nix-shell commands
nixPath = [ "nixpkgs=${pkgs.path}" ]; nixPath = [ "nixpkgs=${pkgs.path}" ];
# Set registry to this flake's packages, used for nix X commands
registry.nixpkgs.to = {
type = "path";
path = builtins.toString pkgs.path;
};
# For security, only allow specific users # For security, only allow specific users
settings.allowed-users = [ settings.allowed-users = [
"@wheel" "@wheel"

View File

@ -31,14 +31,12 @@ in
jo # JSON output jo # JSON output
jq # JSON manipulation jq # JSON manipulation
lf # File viewer lf # File viewer
osc # Clipboard over SSH
qrencode # Generate qr codes qrencode # Generate qr codes
rsync # Copy folders rsync # Copy folders
# ren # Rename files ren # Rename files
# rep # Replace text in files # rep # Replace text in files
ripgrep # grep ripgrep # grep
sd # sed sd # sed
spacer # Output lines in terminal
tealdeer # Cheatsheets tealdeer # Cheatsheets
tree # View directory hierarchy tree # View directory hierarchy
vimv-rs # Batch rename files vimv-rs # Batch rename files

View File

@ -12,40 +12,34 @@
home.packages = home.packages =
let let
ldap_scheme = "ldaps"; ldap_scheme = "ldaps";
magic_number = "2";
magic_end_seq = "corp";
magic_prefix = "take"; magic_prefix = "take";
ldap_port = 3269; ldap_host = "${magic_prefix}${magic_number}.t${magic_number}.${magic_end_seq}";
jq_parse = pkgs.writeShellScriptBin "ljq" '' ldap_port = 636;
jq --slurp \ ldap_dc_1 = "${magic_prefix}${magic_number}";
--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)' ldap_dc_2 = "t${magic_number}";
''; ldap_dc_3 = magic_end_seq;
ldap_script = pkgs.writeShellScriptBin "ldap" '' ldap_script = pkgs.writeShellScriptBin "ldap" ''
if ! [ "$LDAP_HOST" ]; then # if ! [ "$LDAP_HOST" ]; then
echo "No LDAP_HOST specified!" # echo "No LDAP_HOST specified!"
exit 1 # exit 1
fi # fi
SEARCH_FILTER="$@" SEARCH_FILTER="$@"
ldapsearch -LLL \ ldapsearch -LLL \
-B -o ldif-wrap=no \ -B -o ldif-wrap=no \
-E pr=5000/prompt \ -H "${ldap_scheme}://${ldap_host}:${builtins.toString ldap_port}" \
-H "${ldap_scheme}://''${LDAP_HOST}:${builtins.toString ldap_port}" \ -D "${pkgs.lib.toUpper magic_prefix}${magic_number}\\${pkgs.lib.toLower config.user}" \
-D "${pkgs.lib.toUpper magic_prefix}2\\${pkgs.lib.toLower config.user}" \ -w "$(${pkgs._1password}/bin/op item get T${magic_number} --fields label=password)" \
-w "$(${pkgs._1password-cli}/bin/op item get T2 --fields label=password --reveal)" \ -b "DC=${ldap_dc_1},DC=${ldap_dc_2},DC=${ldap_dc_3}" \
-b "dc=''${LDAP_HOST//./,dc=}" \ -s "sub" -x "(cn=$SEARCH_FILTER)" \
-s "sub" -x "(cn=''${SEARCH_FILTER})" \ | jq --slurp \
| ${jq_parse}/bin/ljq --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" '' ldapm_script = pkgs.writeShellScriptBin "ldapm" ''
if ! [ "$LDAP_HOST" ]; then
echo "No LDAP_HOST specified!"
exit 1
fi
${ldap_script}/bin/ldap "$@" | jq '[ .[].memberOf] | add' ${ldap_script}/bin/ldap "$@" | jq '[ .[].memberOf] | add'
''; '';
ldapg_script = pkgs.writeShellScriptBin "ldapg" '' ldapg_script = pkgs.writeShellScriptBin "ldapg" ''
if ! [ "$LDAP_HOST" ]; then
echo "No LDAP_HOST specified!"
exit 1
fi
${ldap_script}/bin/ldap "$@" | jq '[ .[].member] | add' ${ldap_script}/bin/ldap "$@" | jq '[ .[].member] | add'
''; '';
in in
@ -53,7 +47,6 @@
ldap_script ldap_script
ldapm_script ldapm_script
ldapg_script ldapg_script
jq_parse
]; ];
}; };
} }

View File

@ -8,14 +8,14 @@
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin { home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
home.packages = with pkgs; [ nerd-fonts.victor-mono ]; home.packages = with pkgs; [ (nerdfonts.override { fonts = [ "VictorMono" ]; }) ];
programs.alacritty.settings = { programs.alacritty.settings = {
font.normal.family = "VictorMono"; font.normal.family = "VictorMono";
}; };
programs.kitty.font = { programs.kitty.font = {
package = pkgs.nerd-fonts.victor-mono; package = (pkgs.nerdfonts.override { fonts = [ "VictorMono" ]; });
name = "VictorMono Nerd Font Mono"; name = "VictorMono Nerd Font Mono";
}; };
}; };

View File

@ -36,7 +36,7 @@
homebrew.casks = [ "hammerspoon" ]; homebrew.casks = [ "hammerspoon" ];
system.activationScripts.postUserActivation.text = '' system.activationScripts.postUserActivation.text = ''
defaults write org.hammerspoon.Hammerspoon MJConfigFile "${config.homePath}/.config/hammerspoon/init.lua" defaults write org.hammerspoon.Hammerspoon MJConfigFile "~/.config/hammerspoon/init.lua"
sudo killall Dock sudo killall Dock
''; '';
}; };

View File

@ -46,7 +46,7 @@
"scroll-reverser" # Different scroll style for mouse vs. trackpad "scroll-reverser" # Different scroll style for mouse vs. trackpad
"notunes" # Don't launch Apple Music with the play button "notunes" # Don't launch Apple Music with the play button
"steam" # Not packaged for Nixon macOS "steam" # Not packaged for Nixon macOS
"epic-games" # Not packaged for Nix # "epic-games" # Not packaged for Nix
]; ];
}; };
}; };

View File

@ -6,12 +6,11 @@
}: }:
{ {
# config = lib.mkIf pkgs.stdenv.isDarwin { config = lib.mkIf pkgs.stdenv.isDarwin {
# networking = { networking = {
# computerName = config.networking.hostName; computerName = config.networking.hostName;
# # Adjust if necessary # Adjust if necessary
# # hostName = ""; # hostName = "";
# }; };
# }; };
# }
} }

View File

@ -10,30 +10,25 @@
programs.fish = { programs.fish = {
shellAbbrs = { shellAbbrs = {
nr = { nr = lib.mkForce "rebuild-darwin";
function = lib.mkForce "rebuild-darwin"; nro = lib.mkForce "rebuild-darwin offline";
};
nro = {
function = lib.mkForce "rebuild-darwin-offline";
};
}; };
functions = { functions = {
rebuild-darwin = { rebuild-darwin = {
body = '' body = ''
if test "$argv[1]" = "offline"
set option "--option substitute false"
end
git -C ${config.dotfilesPath} add --intent-to-add --all git -C ${config.dotfilesPath} add --intent-to-add --all
echo "darwin-rebuild switch --flake ${config.dotfilesPath}#lookingglass" commandline -r "darwin-rebuild switch $option --flake ${config.dotfilesPath}#lookingglass"
''; commandline --function execute
};
rebuild-darwin-offline = {
body = ''
git -C ${config.dotfilesPath} add --intent-to-add --all
echo "darwin-rebuild switch --option substitute false --flake ${config.dotfilesPath}#lookingglass"
''; '';
}; };
rebuild-home = lib.mkForce { rebuild-home = lib.mkForce {
body = '' body = ''
git -C ${config.dotfilesPath} add --intent-to-add --all git -C ${config.dotfilesPath} add --intent-to-add --all
echo "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#lookingglass"; commandline -r "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#lookingglass";
commandline --function execute
''; '';
}; };
}; };

View File

@ -6,19 +6,6 @@
}: }:
{ {
options = {
terminal = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Path to executable for terminal emulator program.";
default = null;
};
terminalLaunchCommand = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Command for using the terminal to launch a new window with a program.";
default = null;
};
};
config = lib.mkIf pkgs.stdenv.isDarwin { config = lib.mkIf pkgs.stdenv.isDarwin {
services.nix-daemon.enable = true; services.nix-daemon.enable = true;
@ -36,8 +23,6 @@
system = { system = {
stateVersion = 5;
keyboard = { keyboard = {
remapCapsLockToControl = true; remapCapsLockToControl = true;
enableKeyMapping = true; # Allows for skhd enableKeyMapping = true; # Allows for skhd
@ -121,6 +106,7 @@
"${pkgs.discord}/Applications/Discord.app" "${pkgs.discord}/Applications/Discord.app"
"${pkgs.obsidian}/Applications/Obsidian.app" "${pkgs.obsidian}/Applications/Obsidian.app"
"${pkgs.wezterm}/Applications/WezTerm.app" "${pkgs.wezterm}/Applications/WezTerm.app"
"/System/Applications/System Settings.app"
]; ];
}; };
@ -148,9 +134,6 @@
# Where to save screenshots # Where to save screenshots
screencapture.location = "~/Downloads"; screencapture.location = "~/Downloads";
# Show seconds on the clock
menuExtraClock.ShowSeconds = true;
CustomUserPreferences = { CustomUserPreferences = {
# Disable disk image verification # Disable disk image verification
"com.apple.frameworks.diskimages" = { "com.apple.frameworks.diskimages" = {

View File

@ -11,13 +11,9 @@
users.users."${config.user}" = { users.users."${config.user}" = {
# macOS user # macOS user
home = config.homePath; home = config.homePath;
uid = 502;
# shell = pkgs.fish; # Default shell # shell = pkgs.fish; # Default shell
}; };
# This might fix the shell issues
users.knownUsers = [ config.user ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
# Default shell setting doesn't work # Default shell setting doesn't work

View File

@ -10,7 +10,7 @@
unfreePackages = [ unfreePackages = [
"consul" "consul"
"vault-bin" "vault-bin"
# "teams" "teams"
]; ];
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin { home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
@ -19,6 +19,7 @@
pkgs.visidata # CSV inspector pkgs.visidata # CSV inspector
pkgs.dos2unix # Convert Windows text files pkgs.dos2unix # Convert Windows text files
pkgs.inetutils # Includes telnet pkgs.inetutils # Includes telnet
pkgs.youtube-dl # Convert web videos
pkgs.pandoc # Convert text documents pkgs.pandoc # Convert text documents
pkgs.mpd # TUI slideshows pkgs.mpd # TUI slideshows
pkgs.mpv # Video player pkgs.mpv # Video player
@ -26,14 +27,12 @@
pkgs.awscli2 pkgs.awscli2
pkgs.ssm-session-manager-plugin pkgs.ssm-session-manager-plugin
pkgs.awslogs pkgs.awslogs
pkgs.stu # TUI for AWS S3
pkgs.google-cloud-sdk pkgs.google-cloud-sdk
pkgs.vault-bin pkgs.vault-bin
pkgs.consul pkgs.consul
pkgs.noti # Create notifications programmatically pkgs.noti # Create notifications programmatically
pkgs.ipcalc # Make IP network calculations pkgs.ipcalc # Make IP network calculations
# pkgs.teams pkgs.teams
pkgs.cloudflared # Allow connecting to Cloudflare tunnels
(pkgs.writeShellApplication { (pkgs.writeShellApplication {
name = "ocr"; name = "ocr";
runtimeInputs = [ pkgs.tesseract ]; runtimeInputs = [ pkgs.tesseract ];

View File

@ -1,37 +0,0 @@
{
config,
pkgs,
lib,
...
}:
{
options = {
calendar = {
enable = lib.mkEnableOption {
description = "Enable calendar.";
default = false;
};
};
};
config = lib.mkIf (config.gui.enable && config.calendar.enable) {
home-manager.users.${config.user} = {
accounts.calendar.accounts.default = {
basePath = "other/calendars"; # Where to save calendars in ~ directory
name = "personal";
local.type = "filesystem";
primary = true;
remote = {
passwordCommand = [ "" ];
type = "caldav";
url = "https://${config.hostnames.content}/remote.php/dav/principals/users/${config.user}";
userName = config.user;
};
};
home.packages = with pkgs; [ gnome-calendar ];
};
};
}

View File

@ -2,7 +2,6 @@
{ {
imports = [ imports = [
./calendar.nix
./calibre.nix ./calibre.nix
./nautilus.nix ./nautilus.nix
]; ];

View File

@ -20,7 +20,7 @@
# Quick preview with spacebar # Quick preview with spacebar
services.gnome.sushi.enable = true; services.gnome.sushi.enable = true;
environment.systemPackages = [ pkgs.nautilus ]; environment.systemPackages = [ pkgs.gnome.nautilus ];
home-manager.users.${config.user} = { home-manager.users.${config.user} = {
@ -28,13 +28,13 @@
xsession.windowManager.i3.config.keybindings = { xsession.windowManager.i3.config.keybindings = {
"${ "${
config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier
}+n" = "exec --no-startup-id ${pkgs.nautilus}/bin/nautilus"; }+n" = "exec --no-startup-id ${pkgs.gnome.nautilus}/bin/nautilus";
}; };
# Generates a QR code and previews it with sushi # Generates a QR code and previews it with sushi
programs.fish.functions = { programs.fish.functions = {
qr = { qr = {
body = "${pkgs.qrencode}/bin/qrencode $argv[1] -o /tmp/qr.png | ${pkgs.sushi}/bin/sushi /tmp/qr.png"; body = "${pkgs.qrencode}/bin/qrencode $argv[1] -o /tmp/qr.png | ${pkgs.gnome.sushi}/bin/sushi /tmp/qr.png";
}; };
}; };

View File

@ -12,7 +12,6 @@
./legendary.nix ./legendary.nix
./lutris.nix ./lutris.nix
./minecraft-server.nix ./minecraft-server.nix
./moonlight.nix
./ryujinx.nix ./ryujinx.nix
./steam.nix ./steam.nix
]; ];

View File

@ -9,10 +9,7 @@
options.gaming.dwarf-fortress.enable = lib.mkEnableOption "Dwarf Fortress free edition."; options.gaming.dwarf-fortress.enable = lib.mkEnableOption "Dwarf Fortress free edition.";
config = lib.mkIf config.gaming.dwarf-fortress.enable { config = lib.mkIf config.gaming.dwarf-fortress.enable {
unfreePackages = [ unfreePackages = [ "dwarf-fortress" ];
"dwarf-fortress"
"phoebus-theme"
];
environment.systemPackages = environment.systemPackages =
let let
dfDesktopItem = pkgs.makeDesktopItem { dfDesktopItem = pkgs.makeDesktopItem {

View File

@ -1,14 +0,0 @@
{
config,
pkgs,
lib,
...
}:
{
options.gaming.moonlight.enable = lib.mkEnableOption "Enable Moonlight game streaming client.";
config = lib.mkIf config.gaming.moonlight.enable {
environment.systemPackages = with pkgs; [ moonlight-qt ];
};
}

View File

@ -15,7 +15,6 @@
"steam-original" "steam-original"
"steamcmd" "steamcmd"
"steam-run" "steam-run"
"steam-unwrapped"
]; ];
programs.steam = { programs.steam = {
@ -28,7 +27,7 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Enable terminal interaction # Enable terminal interaction
steamcmd steamPackages.steamcmd
steam-tui steam-tui
# Overlay with performance monitoring # Overlay with performance monitoring

View File

@ -46,16 +46,6 @@
type = lib.types.str; type = lib.types.str;
description = "Command to use for power options menu"; description = "Command to use for power options menu";
}; };
terminal = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Path to executable for terminal emulator program.";
default = null;
};
terminalLaunchCommand = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Command for using the terminal to launch a new window with a program.";
default = null;
};
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

@ -14,7 +14,7 @@ in
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
victor-mono # Used for Vim and Terminal victor-mono # Used for Vim and Terminal
nerd-fonts.hack # For Polybar, Rofi (nerdfonts.override { fonts = [ "Hack" ]; }) # For Polybar, Rofi
]; ];
fonts.fontconfig.defaultFonts.monospace = [ fontName ]; fonts.fontconfig.defaultFonts.monospace = [ fontName ];

View File

@ -42,7 +42,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;
@ -209,6 +209,12 @@
label-foreground = config.theme.colors.base06; 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 = " ";

View File

@ -29,7 +29,6 @@ in
cycle = true; cycle = true;
location = "center"; location = "center";
pass = { }; pass = { };
terminal = lib.mkIf pkgs.stdenv.isLinux config.terminal;
plugins = [ plugins = [
pkgs.rofi-calc pkgs.rofi-calc
pkgs.rofi-emoji pkgs.rofi-emoji

View File

@ -36,6 +36,8 @@ in
{ {
config = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) { config = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) {
sound.enable = true;
# Enable PipeWire # Enable PipeWire
services.pipewire = { services.pipewire = {
enable = true; enable = true;

View File

@ -1,4 +1,9 @@
{ config, lib, ... }: {
config,
pkgs,
lib,
...
}:
{ {
config = lib.mkIf config.physical { config = lib.mkIf config.physical {
@ -12,30 +17,24 @@
autoRepeatInterval = 40; autoRepeatInterval = 40;
}; };
# Swap Caps-Lock with Escape when pressed or LCtrl when held/combined with others # Use capslock as escape and/or control
# Inspired by: https://www.youtube.com/watch?v=XuQVbZ0wENE services.keyd = {
services.kanata = {
enable = true; enable = true;
keyboards.default = { keyboards = {
devices = [ default = {
"/dev/input/by-id/usb-Logitech_Logitech_G710_Keyboard-event-kbd" ids = [ "*" ];
"/dev/input/by-id/usb-Logitech_Logitech_G710_Keyboard-if01-event-kbd" settings = {
]; main = {
extraDefCfg = "process-unmapped-keys yes"; capslock = "overload(control, esc)";
config = '' };
(defsrc };
caps };
)
(defalias
escctrl (tap-hold-press 1000 1000 esc lctrl)
)
(deflayer base
@escctrl
)
'';
}; };
}; };
# 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

@ -38,14 +38,13 @@
setupCommands = '' setupCommands = ''
${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 \ ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 \
--mode 1920x1200 \ --mode 1920x1200 \
--pos 2560x0 \ --pos 1920x0 \
--rotate left \ --rotate left \
--output DisplayPort-0 \ --output HDMI-A-0 \
--primary \ --primary \
--mode 2560x1440 \ --mode 1920x1080 \
--pos 0x560 \ --pos 0x560 \
--rotate normal \ --rotate normal \
--rate 120 \
--output DVI-0 --off \ --output DVI-0 --off \
--output DVI-1 --off \ --output DVI-1 --off \
''; '';

View File

@ -21,15 +21,5 @@
accelProfile = "flat"; accelProfile = "flat";
accelSpeed = "1.15"; accelSpeed = "1.15";
}; };
# Cursor
home-manager.users.${config.user}.home.pointerCursor = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
size = 24;
gtk.enable = true;
x11.enable = true;
};
}; };
} }

View File

@ -1,9 +1,4 @@
{ { config, lib, ... }:
config,
pkgs,
lib,
...
}:
{ {
options = { options = {
@ -13,7 +8,7 @@
config = lib.mkIf (config.server && config.zfs.enable) { config = lib.mkIf (config.server && config.zfs.enable) {
# Only use compatible Linux kernel, since ZFS can be behind # Only use compatible Linux kernel, since ZFS can be behind
boot.kernelPackages = pkgs.linuxPackages; # Defaults to latest LTS boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
boot.kernelParams = [ "nohibernate" ]; boot.kernelParams = [ "nohibernate" ];
boot.supportedFilesystems = [ "zfs" ]; boot.supportedFilesystems = [ "zfs" ];
services.prometheus.exporters.zfs.enable = config.prometheus.exporters.enable; services.prometheus.exporters.zfs.enable = config.prometheus.exporters.enable;

View File

@ -1,71 +0,0 @@
{ config, lib, ... }:
{
options = {
services.actualbudget = {
enable = lib.mkEnableOption "ActualBudget budgeting service";
port = lib.mkOption {
type = lib.types.port;
description = "Port to use for the localhost";
default = 5006;
};
};
};
config = lib.mkIf config.services.actualbudget.enable {
virtualisation.podman.enable = lib.mkDefault true;
users.users.actualbudget = {
isSystemUser = true;
group = "shared";
uid = 980;
};
# Create budget directory, allowing others to manage it
systemd.tmpfiles.rules = [
"d /var/lib/actualbudget 0770 actualbudget shared"
];
virtualisation.oci-containers.containers.actualbudget = {
workdir = null;
volumes = [ "/var/lib/actualbudget:/data" ];
user = "${toString (builtins.toString config.users.users.actualbudget.uid)}";
pull = "missing";
privileged = false;
ports = [ "127.0.0.1:${builtins.toString config.services.actualbudget.port}:5006" ];
networks = [ ];
log-driver = "journald";
labels = {
app = "actualbudget";
};
image = "ghcr.io/actualbudget/actual-server:25.1.0";
hostname = null;
environmentFiles = [ ];
environment = {
DEBUG = "actual:config"; # Enable debug logging
ACTUAL_TRUSTED_PROXIES = builtins.concatStringsSep "," [ "127.0.0.1" ];
};
dependsOn = [ ];
autoStart = true;
};
# Allow web traffic to Caddy
caddy.routes = [
{
match = [ { host = [ config.hostnames.budget ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString config.services.actualbudget.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.budget ];
};
}

View File

@ -14,11 +14,6 @@ let
url = "localhost:7878"; url = "localhost:7878";
apiKey = config.secrets.radarrApiKey.dest; apiKey = config.secrets.radarrApiKey.dest;
}; };
readarr = {
exportarrPort = "9711";
url = "localhost:8787";
apiKey = config.secrets.readarrApiKey.dest;
};
sonarr = { sonarr = {
exportarrPort = "9708"; exportarrPort = "9708";
url = "localhost:8989"; url = "localhost:8989";
@ -44,44 +39,37 @@ in
config = lib.mkIf config.arrs.enable { config = lib.mkIf config.arrs.enable {
# Broken on 2024-12-07
# https://discourse.nixos.org/t/solved-sonarr-is-broken-in-24-11-unstable-aka-how-the-hell-do-i-use-nixpkgs-config-permittedinsecurepackages/
insecurePackages = [
"aspnetcore-runtime-wrapped-6.0.36"
"aspnetcore-runtime-6.0.36"
"dotnet-sdk-wrapped-6.0.428"
"dotnet-sdk-6.0.428"
];
services = { services = {
bazarr = { bazarr = {
enable = true; enable = true;
group = "shared"; group = "media";
}; };
jellyseerr.enable = true; jellyseerr.enable = true;
prowlarr.enable = true; prowlarr.enable = true;
sabnzbd = { sabnzbd = {
enable = true; enable = true;
group = "shared"; group = "media";
# The config file must be editable within the application # The config file must be editable within the application
# It contains server configs and credentials # It contains server configs and credentials
configFile = "/data/downloads/sabnzbd/sabnzbd.ini"; configFile = "/data/downloads/sabnzbd/sabnzbd.ini";
}; };
sonarr = { sonarr = {
enable = true; enable = true;
group = "shared"; group = "media";
}; };
radarr = { radarr = {
enable = true; enable = true;
group = "shared"; group = "media";
};
readarr = {
enable = true;
group = "shared";
}; };
}; };
# Allows shared group to read/write the sabnzbd directory # Create a media group to be shared between services
users.groups.media = { };
# Give the human user access to the media group
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 as a dependency for sabnzbd unfreePackages = [ "unrar" ]; # Required as a dependency for sabnzbd
@ -122,21 +110,6 @@ in
} }
]; ];
} }
{
group = "download";
match = [
{
host = [ config.hostnames.download ];
path = [ "/readarr*" ];
}
];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = arrConfig.readarr.url; } ];
}
];
}
{ {
group = "download"; group = "download";
match = [ match = [
@ -250,11 +223,6 @@ in
dest = "/var/private/radarr-api"; dest = "/var/private/radarr-api";
prefix = "API_KEY="; prefix = "API_KEY=";
}; };
secrets.readarrApiKey = {
source = ../../../private/radarr-api-key.age;
dest = "/var/private/readarr-api";
prefix = "API_KEY=";
};
secrets.sonarrApiKey = { secrets.sonarrApiKey = {
source = ../../../private/sonarr-api-key.age; source = ../../../private/sonarr-api-key.age;
dest = "/var/private/sonarr-api"; dest = "/var/private/sonarr-api";

View File

@ -1,29 +0,0 @@
{ config, lib, ... }:
{
config = lib.mkIf config.services.audiobookshelf.enable {
services.audiobookshelf = {
group = "shared";
dataDir = "audiobookshelf";
};
# Allow web traffic to Caddy
caddy.routes = [
{
match = [ { host = [ config.hostnames.audiobooks ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString config.services.audiobookshelf.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.audiobooks ];
};
}

View File

@ -22,11 +22,6 @@
description = "S3 access key ID for backups"; description = "S3 access key ID for backups";
default = null; default = null;
}; };
glacierBucket = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "S3 bucket for glacier backups";
default = null;
};
}; };
}; };
@ -49,10 +44,6 @@
settings = { }; settings = { };
}; };
# Broken on 2024-08-23
# https://github.com/NixOS/nixpkgs/commit/0875d0ce1c778f344cd2377a5337a45385d6ffa0
insecurePackages = [ "litestream-0.3.13" ];
# Wait for secret to exist # Wait for secret to exist
systemd.services.litestream = { systemd.services.litestream = {
after = [ "backup-secret.service" ]; after = [ "backup-secret.service" ];
@ -74,30 +65,5 @@
# timerConfig = { OnCalendar = "00:05:00"; }; # timerConfig = { OnCalendar = "00:05:00"; };
# environmentFile = backup.s3File; # environmentFile = backup.s3File;
# }; # };
secrets.s3-glacier = {
source = ../../../private/s3-glacier.age;
dest = "${config.secretsDirectory}/s3-glacier";
};
secrets.restic = {
source = ../../../private/restic.age;
dest = "${config.secretsDirectory}/restic";
};
services.restic.backups = lib.mkIf (config.backup.s3.glacierBucket != null) {
default = {
repository = "s3:s3.us-east-1.amazonaws.com/${config.backup.s3.glacierBucket}/restic";
paths = [ ];
environmentFile = config.secrets.s3-glacier.dest;
passwordFile = config.secrets.restic.dest;
pruneOpts = [
"--keep-daily 14"
"--keep-weekly 6"
"--keep-monthly 12"
"--keep-yearly 100"
];
};
};
}; };
} }

View File

@ -20,7 +20,6 @@ let
config.hostnames.content config.hostnames.content
config.hostnames.books config.hostnames.books
config.hostnames.download config.hostnames.download
config.hostnames.photos
]; ];
mkRecord = service: "${service} A ${localIp}"; mkRecord = service: "${service} A ${localIp}";
localRecords = lib.concatLines (map mkRecord localServices); localRecords = lib.concatLines (map mkRecord localServices);

View File

@ -46,7 +46,7 @@
# Force Caddy to 403 if not coming from allowlisted source # Force Caddy to 403 if not coming from allowlisted source
caddy.cidrAllowlist = [ "127.0.0.1/32" ]; caddy.cidrAllowlist = [ "127.0.0.1/32" ];
caddy.routes = lib.mkBefore [ caddy.routes = [
{ {
match = [ { not = [ { remote_ip.ranges = config.caddy.cidrAllowlist; } ]; } ]; match = [ { not = [ { remote_ip.ranges = config.caddy.cidrAllowlist; } ]; } ];
handle = [ handle = [
@ -58,155 +58,42 @@
} }
]; ];
services.caddy = services.caddy = {
let adapter = "''"; # Required to enable JSON
default_logger_name = "other"; configFile = pkgs.writeText "Caddyfile" (
roll_size_mb = 25; builtins.toJSON {
# Extract list of hostnames (fqdns) from current caddy routes apps.http.servers.main = {
getHostnameFromMatch = match: if (lib.hasAttr "host" match) then match.host else [ ]; listen = [ ":443" ];
getHostnameFromRoute =
route:
if (lib.hasAttr "match" route) then (lib.concatMap getHostnameFromMatch route.match) else [ ];
hostnames_non_unique = lib.concatMap getHostnameFromRoute config.caddy.routes;
hostnames = lib.unique hostnames_non_unique;
# Create attrset of subdomains to their fqdns
hostname_map = builtins.listToAttrs (
map (hostname: {
name = builtins.head (lib.splitString "." hostname);
value = hostname;
}) hostnames
);
in
{
adapter = "''"; # Required to enable JSON
configFile = pkgs.writeText "Caddyfile" (
builtins.toJSON {
apps.http.servers.main = {
listen = [ ":443" ];
# These routes are pulled from the rest of this repo # 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;
# Uncommenting collects access logs logs = { }; # Uncommenting collects access logs
logs = { };
inherit default_logger_name; apps.http.servers.metrics = { }; # Enables Prometheus metrics
# Invert hostnames keys and values apps.tls.automation.policies = config.caddy.tlsPolicies;
logger_names = lib.mapAttrs' (name: value: {
name = value; # Setup logging to file
value = name; logging.logs.main = {
}) hostname_map; encoder = {
}; format = "console";
}; };
apps.http.servers.metrics = { }; # Enables Prometheus metrics writer = {
apps.tls.automation.policies = config.caddy.tlsPolicies; output = "file";
filename = "${config.services.caddy.logDir}/caddy.log";
# Setup logging to journal and files roll = true;
logging.logs = roll_size_mb = 1;
{ };
# System logs and catch-all level = "INFO";
# Must be called `default` to override Caddy's built-in default logger };
default = { }
level = "INFO"; );
encoder.format = "console";
writer = {
output = "stderr";
};
exclude = (map (hostname: "http.log.access.${hostname}") (builtins.attrNames hostname_map)) ++ [
"http.log.access.${default_logger_name}"
];
};
# This is for the default access logs (anything not captured by hostname)
other = {
level = "INFO";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/other.log";
roll = true;
inherit roll_size_mb;
};
include = [ "http.log.access.${default_logger_name}" ];
};
# This is for using the Caddy API, which will probably never happen
admin = {
level = "INFO";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/admin.log";
roll = true;
inherit roll_size_mb;
};
include = [ "admin" ];
};
# This is for TLS cert management tracking
tls = {
level = "INFO";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/tls.log";
roll = true;
inherit roll_size_mb;
};
include = [ "tls" ];
};
# This is for debugging
debug = {
level = "DEBUG";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/debug.log";
roll = true;
roll_keep = 1;
inherit roll_size_mb;
};
};
}
# These are the access logs for individual hostnames
// (lib.mapAttrs (name: value: {
level = "INFO";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/${name}-access.log";
roll = true;
inherit roll_size_mb;
};
include = [ "http.log.access.${name}" ];
}) hostname_map)
# We also capture just the errors separately for easy debugging
// (lib.mapAttrs' (name: value: {
name = "${name}-error";
value = {
level = "ERROR";
encoder.format = "json";
writer = {
output = "file";
filename = "${config.services.caddy.logDir}/${name}-error.log";
roll = true;
inherit roll_size_mb;
};
include = [ "http.log.access.${name}" ];
};
}) hostname_map);
}
);
};
systemd.services.caddy.serviceConfig = {
# Allows Caddy to serve lower ports (443, 80)
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
# Prevent flooding of logs by rate-limiting
LogRateLimitIntervalSec = "5s"; # Limit period
LogRateLimitBurst = 100; # Limit threshold
}; };
# 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 # Required for web traffic to reach this machine
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [
80 80

View File

@ -28,7 +28,6 @@ in
config = lib.mkIf config.services.calibre-web.enable { config = lib.mkIf config.services.calibre-web.enable {
services.calibre-web = { services.calibre-web = {
group = "shared";
openFirewall = true; openFirewall = true;
options = { options = {
reverseProxyAuth.enable = false; reverseProxyAuth.enable = false;

View File

@ -78,8 +78,6 @@ in
issuers = [ issuers = [
{ {
module = "acme"; module = "acme";
email = "acme@${config.mail.server}";
account_key = "{env.ACME_ACCOUNT_KEY}";
challenges = { challenges = {
dns = { dns = {
provider = { provider = {
@ -94,18 +92,7 @@ in
} }
]; ];
# Allow Caddy to read Cloudflare API key for DNS validation # Allow Caddy to read Cloudflare API key for DNS validation
systemd.services.caddy.serviceConfig.EnvironmentFile = [ systemd.services.caddy.serviceConfig.EnvironmentFile = config.secrets.cloudflare-api.dest;
config.secrets.cloudflare-api.dest
config.secrets.letsencrypt-key.dest
];
# Private key is used for LetsEncrypt
secrets.letsencrypt-key = {
source = ../../../private/letsencrypt-key.age;
dest = "${config.secretsDirectory}/letsencrypt-key";
owner = "caddy";
group = "caddy";
};
# API key must have access to modify Cloudflare DNS records # API key must have access to modify Cloudflare DNS records
secrets.cloudflare-api = { secrets.cloudflare-api = {
@ -117,14 +104,8 @@ in
# Wait for secret to exist # Wait for secret to exist
systemd.services.caddy = { systemd.services.caddy = {
after = [ after = [ "cloudflare-api-secret.service" ];
"cloudflare-api-secret.service" requires = [ "cloudflare-api-secret.service" ];
"letsencrypt-key-secret.service"
];
requires = [
"cloudflare-api-secret.service"
"letsencrypt-key-secret.service"
];
}; };
# Allows Nextcloud to trust Cloudflare IPs # Allows Nextcloud to trust Cloudflare IPs
@ -135,9 +116,6 @@ in
[ "127.0.0.1" ] ++ cloudflareIpRanges [ "127.0.0.1" ] ++ cloudflareIpRanges
); );
# Using dyn-dns instead of ddclient because I can't find a way to choose
# between proxied and non-proxied records for Cloudflare using just
# ddclient.
services.cloudflare-dyndns = services.cloudflare-dyndns =
lib.mkIf ((builtins.length config.services.cloudflare-dyndns.domains) > 0) lib.mkIf ((builtins.length config.services.cloudflare-dyndns.domains) > 0)
{ {

View File

@ -5,8 +5,6 @@
{ {
imports = [ imports = [
./actualbudget.nix
./audiobookshelf.nix
./arr.nix ./arr.nix
./backups.nix ./backups.nix
./bind.nix ./bind.nix
@ -14,10 +12,7 @@
./calibre.nix ./calibre.nix
./cloudflare-tunnel.nix ./cloudflare-tunnel.nix
./cloudflare.nix ./cloudflare.nix
./filebrowser.nix
./identity.nix ./identity.nix
./immich-proxy.nix
./immich.nix
./irc.nix ./irc.nix
./gitea-runner.nix ./gitea-runner.nix
./gitea.nix ./gitea.nix
@ -31,7 +26,6 @@
./n8n.nix ./n8n.nix
./netdata.nix ./netdata.nix
./nextcloud.nix ./nextcloud.nix
./ntfy.nix
./paperless.nix ./paperless.nix
./postgresql.nix ./postgresql.nix
./prometheus.nix ./prometheus.nix
@ -39,7 +33,6 @@
./secrets.nix ./secrets.nix
./sshd.nix ./sshd.nix
./transmission.nix ./transmission.nix
./uptime-kuma.nix
./vaultwarden.nix ./vaultwarden.nix
./victoriametrics.nix ./victoriametrics.nix
./wireguard.nix ./wireguard.nix

View File

@ -1,68 +0,0 @@
{
config,
pkgs,
lib,
...
}:
let
dataDir = "/var/lib/filebrowser";
settings = {
port = 8020;
baseURL = "";
address = "";
log = "stdout";
database = "${dataDir}/filebrowser.db";
root = "";
"auth.method" = "json";
username = config.user;
# Generate password: htpasswd -nBC 10 "" | tr -d ':\n'
password = "$2y$10$ze1cMob0k6pnXRjLowYfZOVZWg4G.dsPtH3TohbUeEbI0sdkG9.za";
};
in
{
options.filebrowser.enable = lib.mkEnableOption "Use Filebrowser.";
config = lib.mkIf config.filebrowser.enable {
environment.etc."filebrowser/.filebrowser.json".text = builtins.toJSON settings;
systemd.services.filebrowser = lib.mkIf config.filebrowser.enable {
description = "Filebrowser cloud file services";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
startLimitIntervalSec = 14400;
startLimitBurst = 10;
serviceConfig = {
ExecStart = "${pkgs.filebrowser}/bin/filebrowser";
DynamicUser = true;
Group = "shared";
ReadWritePaths = [ dataDir ];
StateDirectory = [ "filebrowser" ];
Restart = "on-failure";
RestartPreventExitStatus = 1;
RestartSec = "5s";
};
path = [ pkgs.getent ]; # Fix: getent not found in $PATH
};
caddy.routes = [
{
match = [ { host = [ config.hostnames.files ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString settings.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.files ];
};
}

View File

@ -53,7 +53,6 @@ in
uid = promUid; uid = promUid;
} }
]; ];
# TODO: Add option to pull services from a list like Caddy does
dashboards.settings.providers = [ dashboards.settings.providers = [
{ {
name = "test"; name = "test";
@ -369,18 +368,6 @@ in
range = true; range = true;
refId = "C"; refId = "C";
} }
{
datasource = {
type = "prometheus";
uid = promUid;
};
editorMode = "code";
expr = "readarr_system_status";
hide = false;
legendFormat = "Readarr";
range = true;
refId = "F";
}
{ {
datasource = { datasource = {
type = "prometheus"; type = "prometheus";
@ -682,7 +669,7 @@ in
}; };
editorMode = "code"; editorMode = "code";
exemplar = false; exemplar = false;
"expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[1d])''; "expr" = ''increase(zfs_dataset_used_bytes{name="tank"}[1d])'';
hide = false; hide = false;
instant = false; instant = false;
interval = ""; interval = "";
@ -696,7 +683,7 @@ in
uid = promUid; uid = promUid;
}; };
editorMode = "code"; editorMode = "code";
"expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[7d])''; "expr" = ''increase(zfs_dataset_used_bytes{name="tank"}[7d])'';
hide = false; hide = false;
legendFormat = "Past Week"; legendFormat = "Past Week";
range = true; range = true;
@ -708,7 +695,7 @@ in
uid = promUid; uid = promUid;
}; };
editorMode = "code"; editorMode = "code";
"expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[30d])''; "expr" = ''increase(zfs_dataset_used_bytes{name="tank"}[30d])'';
hide = false; hide = false;
legendFormat = "Past Month"; legendFormat = "Past Month";
range = true; range = true;
@ -832,28 +819,6 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:8787";
};
properties = [
{
id = "displayName";
value = "Readarr";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.download}/readarr";
}
];
}
];
}
{ {
matcher = { matcher = {
id = "byName"; id = "byName";
@ -920,28 +885,6 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:8086";
};
properties = [
{
id = "displayName";
value = "InfluxDB";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.influxdb}";
}
];
}
];
}
{ {
matcher = { matcher = {
id = "byName"; id = "byName";
@ -986,28 +929,6 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:9000";
};
properties = [
{
id = "displayName";
value = "The Lounge";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.irc}";
}
];
}
];
}
{ {
matcher = { matcher = {
id = "byName"; id = "byName";
@ -1118,50 +1039,6 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:${builtins.toString config.services.paperless.port}";
};
properties = [
{
id = "displayName";
value = "Paperless";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.paperless}";
}
];
}
];
}
{
matcher = {
id = "byName";
options = "localhost:${builtins.toString config.services.audiobookshelf.port}";
};
properties = [
{
id = "displayName";
value = "Audiobookshelf";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.audiobooks}";
}
];
}
];
}
]; ];
}; };
gridPos = { gridPos = {
@ -2444,7 +2321,7 @@ in
datasourceUid = promUid; datasourceUid = promUid;
model = { model = {
editorMode = "code"; editorMode = "code";
expr = ''systemd_unit_state{name=~"cloudflared-tunnel-.*", state="active", job!="tempest"}''; expr = ''systemd_unit_state{name=~"cloudflared-tunnel-.*", state="active"}'';
hide = false; hide = false;
instant = true; instant = true;
intervalMs = 1000; intervalMs = 1000;
@ -2541,7 +2418,7 @@ in
execErrState = "Error"; execErrState = "Error";
for = "5m"; for = "5m";
annotations = { annotations = {
description = "Cloudflare Tunnel for {{ index $labels \"job\" }}."; description = "Cloudflare Tunnel for {{ $job }}.";
summary = "Cloudflare Tunnel is down."; summary = "Cloudflare Tunnel is down.";
}; };
isPaused = false; isPaused = false;

View File

@ -1,23 +0,0 @@
{ config, lib, ... }:
{
options = {
immich-proxy.enable = lib.mkEnableOption "Immich proxy";
};
config = lib.mkIf config.services.immich-proxy.enable {
caddy.routes = [
{
match = [ { host = [ config.hostnames.photosProxy ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "${config.hostnames.photosBackend}:443"; } ];
}
];
}
];
};
}

View File

@ -1,48 +0,0 @@
{ config, lib, ... }:
{
config = lib.mkIf config.services.immich.enable {
services.immich = {
port = 2283;
group = "shared";
database.enable = true;
redis.enable = true;
machine-learning.enable = true;
machine-learning.environment = { };
mediaLocation = "/data/images";
secretsFile = null;
settings.server.externalDomain = "https://${config.hostnames.photos}";
environment = {
IMMICH_ENV = "production";
IMMICH_LOG_LEVEL = "log";
NO_COLOR = "false";
IMMICH_TRUSTED_PROXIES = "127.0.0.1";
};
};
caddy.routes = [
{
match = [ { host = [ config.hostnames.photos ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString config.services.immich.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.photos ];
# Point localhost to the local domain
networking.hosts."127.0.0.1" = [ config.hostnames.photos ];
# Backups
services.restic.backups.default.paths = [ "/data/images" ];
};
}

View File

@ -11,7 +11,7 @@
config = lib.mkIf config.services.jellyfin.enable { config = lib.mkIf config.services.jellyfin.enable {
services.jellyfin.group = "shared"; services.jellyfin.group = "media";
users.users.jellyfin = { users.users.jellyfin = {
isSystemUser = true; isSystemUser = true;
}; };
@ -49,8 +49,8 @@
# Create videos directory, allow anyone in Jellyfin group to manage it # Create videos directory, allow anyone in Jellyfin group to manage it
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d /var/lib/jellyfin 0775 jellyfin shared" "d /var/lib/jellyfin 0775 jellyfin media"
"d /var/lib/jellyfin/library 0775 jellyfin shared" "d /var/lib/jellyfin/library 0775 jellyfin media"
]; ];
# Enable VA-API for hardware transcoding # Enable VA-API for hardware transcoding

View File

@ -9,18 +9,12 @@
unfreePackages = [ "n8n" ]; unfreePackages = [ "n8n" ];
services.n8n = { services.n8n = {
webhookUrl = "https://${config.hostnames.n8n}";
settings = { settings = {
listen_address = "127.0.0.1"; listen_address = "127.0.0.1";
port = 5678; port = 5678;
}; };
}; };
systemd.services.n8n.environment = {
N8N_EDITOR_BASE_URL = config.services.n8n.webhookUrl;
};
# Configure Cloudflare DNS to point to this machine # Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.n8n ]; services.cloudflare-dyndns.domains = [ config.hostnames.n8n ];

View File

@ -9,7 +9,7 @@
config = lib.mkIf config.services.nextcloud.enable { config = lib.mkIf config.services.nextcloud.enable {
services.nextcloud = { services.nextcloud = {
package = pkgs.nextcloud30; # Required to specify package = pkgs.nextcloud29; # Required to specify
configureRedis = true; configureRedis = true;
datadir = "/data/nextcloud"; datadir = "/data/nextcloud";
database.createLocally = true; database.createLocally = true;
@ -26,8 +26,6 @@
trusted_domains = [ config.hostnames.content ]; trusted_domains = [ config.hostnames.content ];
trusted_proxies = [ "127.0.0.1" ]; trusted_proxies = [ "127.0.0.1" ];
maintenance_window_start = 4; # Run jobs at 4am UTC maintenance_window_start = 4; # Run jobs at 4am UTC
log_type = "file";
loglevel = 1; # Include all actions in the log
}; };
extraAppsEnable = true; extraAppsEnable = true;
extraApps = { extraApps = {

View File

@ -1,33 +0,0 @@
{ config, lib, ... }:
{
config = lib.mkIf config.services.ntfy-sh.enable {
services.ntfy-sh = {
settings = {
base-url = "https://${config.hostnames.notifications}";
upstream-base-url = "https://ntfy.sh";
listen-http = ":8333";
behind-proxy = true;
auth-default-access = "deny-all";
auth-file = "/var/lib/ntfy-sh/user.db";
};
};
caddy.routes = [
{
match = [ { host = [ config.hostnames.notifications ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost${config.services.ntfy-sh.settings.listen-http}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.notifications ];
};
}

View File

@ -7,7 +7,7 @@
services.samba = lib.mkIf config.services.samba.enable { services.samba = lib.mkIf config.services.samba.enable {
openFirewall = true; openFirewall = true;
settings.data = { shares.data = {
path = "/data"; path = "/data";
browseable = "yes"; browseable = "yes";
"read only" = "no"; "read only" = "no";

View File

@ -1,32 +0,0 @@
{ config, lib, ... }:
{
config = lib.mkIf config.services.uptime-kuma.enable {
services.uptime-kuma = {
settings = {
PORT = "3033";
};
};
# Allow web traffic to Caddy
caddy.routes = [
{
match = [ { host = [ config.hostnames.status ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [
{ dial = "localhost:${config.services.uptime-kuma.settings.PORT}"; }
];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.status ];
};
}

View File

@ -5,7 +5,6 @@
config, config,
pkgs, pkgs,
lib, lib,
pkgs-stable,
... ...
}: }:
@ -39,10 +38,6 @@ in
config = { config = {
services.victoriametrics.extraOptions = [
"-promscrape.config=${(pkgs.formats.yaml { }).generate "scrape.yml" prometheusConfig}"
];
systemd.services.vmauth = lib.mkIf config.services.victoriametrics.enable { systemd.services.vmauth = lib.mkIf config.services.victoriametrics.enable {
description = "VictoriaMetrics basic auth proxy"; description = "VictoriaMetrics basic auth proxy";
after = [ "network.target" ]; after = [ "network.target" ];
@ -89,7 +84,6 @@ in
# VMAgent # VMAgent
services.vmagent = { services.vmagent = {
package = pkgs-stable.vmagent;
prometheusConfig = prometheusConfig; prometheusConfig = prometheusConfig;
remoteWrite = { remoteWrite = {
url = "https://${config.hostnames.prometheus}/api/v1/write"; url = "https://${config.hostnames.prometheus}/api/v1/write";

View File

@ -10,7 +10,6 @@
./auto-upgrade.nix ./auto-upgrade.nix
./doas.nix ./doas.nix
./journald.nix ./journald.nix
./shared.nix
./user.nix ./user.nix
./timezone.nix ./timezone.nix
]; ];

View File

@ -4,10 +4,7 @@
# How long to keep journalctl entries # How long to keep journalctl entries
# This helps to make sure log disk usage doesn't grow too unwieldy # This helps to make sure log disk usage doesn't grow too unwieldy
services.journald.extraConfig = '' services.journald.extraConfig = ''
SystemMaxUse=4G SystemMaxUse=100M
SystemKeepFree=10G
SystemMaxFileSize=128M
SystemMaxFiles=500
MaxFileSec=1month MaxFileSec=1month
MaxRetentionSec=2month MaxRetentionSec=2month
''; '';

View File

@ -1,14 +0,0 @@
{ config, lib, ... }:
{
config = lib.mkIf config.server {
# Create a shared group for many services
users.groups.shared = { };
# Give the human user access to the shared group
users.users.${config.user}.extraGroups = [ config.users.groups.shared.name ];
};
}

View File

@ -0,0 +1,27 @@
diff --git a/cps/__init__.py b/cps/__init__.py
index f4f8dbf2..7377acdf 100644
--- a/cps/__init__.py
+++ b/cps/__init__.py
@@ -151,7 +151,6 @@ def create_app():
lm.login_view = 'web.login'
lm.anonymous_user = ub.Anonymous
- lm.session_protection = 'strong' if config.config_session == 1 else "basic"
db.CalibreDB.update_config(config)
db.CalibreDB.setup_db(config.config_calibre_dir, cli_param.settings_path)
diff --git a/cps/admin.py b/cps/admin.py
index 045a9523..825a28af 100644
--- a/cps/admin.py
+++ b/cps/admin.py
@@ -102,10 +102,6 @@ def admin_required(f):
@admi.before_app_request
def before_request():
- if not ub.check_user_session(current_user.id,
- flask_session.get('_id')) and 'opds' not in request.path \
- and config.config_session == 1:
- logout_user()
g.constants = constants
g.google_site_verification = os.getenv('GOOGLE_SITE_VERIFICATION', '')
g.allow_registration = config.config_public_reg

7
overlays/calibre-web.nix Normal file
View File

@ -0,0 +1,7 @@
# Fix: https://github.com/janeczku/calibre-web/issues/2422
_final: prev: {
calibre-web = prev.calibre-web.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ./calibre-web-cloudflare.patch ];
});
}

3
overlays/disko.nix Normal file
View File

@ -0,0 +1,3 @@
# Add disko to nixpkgs from its input flake
inputs: _final: prev: { disko = inputs.disko.packages.${prev.system}.disko; }

View File

@ -1,9 +1,15 @@
inputs: _final: prev: { _final: prev: {
gh-collaborators = prev.buildGoModule rec { gh-collaborators = prev.buildGoModule rec {
pname = "gh-collaborators"; pname = "gh-collaborators";
version = "v2.0.3"; version = "v2.0.3";
src = inputs.gh-collaborators;
src = prev.fetchFromGitHub {
owner = "nmasur";
repo = "gh-collaborators";
rev = version;
sha256 = "sha256-XgAZ/+7QxIRKiAZ4Gp/rLgTABSXkVjFQ8TbXOFj9vpM=";
};
# vendorHash = "sha256-rsRDOgJBa8T6+bC/APcmuRmg6ykbIp9pwRnJ9rrfHEs="; # vendorHash = "sha256-rsRDOgJBa8T6+bC/APcmuRmg6ykbIp9pwRnJ9rrfHEs=";
vendorHash = "sha256-fykxRb2U9DDsXorRTLiVWmhMY89N7RS07sal8ww6gz4="; vendorHash = "sha256-fykxRb2U9DDsXorRTLiVWmhMY89N7RS07sal8ww6gz4=";

View File

@ -38,7 +38,5 @@ in
base16-nvim = plugin "base16-nvim" inputs.base16-nvim-src; base16-nvim = plugin "base16-nvim" inputs.base16-nvim-src;
baleia-nvim = plugin "baleia-nvim" inputs.baleia-nvim-src; baleia-nvim = plugin "baleia-nvim" inputs.baleia-nvim-src;
hmts-nvim = plugin "hmts-nvim" inputs.hmts-nvim-src; hmts-nvim = plugin "hmts-nvim" inputs.hmts-nvim-src;
tiny-inline-diagnostic-nvim = plugin "tiny-inline-diagnostic-nvim" inputs.tiny-inline-diagnostic-nvim-src;
snipe-nvim = plugin "snipe-nvim" inputs.snipe-nvim-src;
}; };
} }

View File

@ -5,25 +5,21 @@ inputs: _final: prev: {
url = inputs.nextcloud-news.outPath; url = inputs.nextcloud-news.outPath;
sha256 = inputs.nextcloud-news.narHash; sha256 = inputs.nextcloud-news.narHash;
license = "agpl3Plus"; license = "agpl3Plus";
unpack = true;
}; };
external = prev.fetchNextcloudApp { external = prev.fetchNextcloudApp {
url = inputs.nextcloud-external.outPath; url = inputs.nextcloud-external.outPath;
sha256 = inputs.nextcloud-external.narHash; sha256 = inputs.nextcloud-external.narHash;
license = "agpl3Plus"; license = "agpl3Plus";
unpack = true;
}; };
cookbook = prev.fetchNextcloudApp { cookbook = prev.fetchNextcloudApp {
url = inputs.nextcloud-cookbook.outPath; url = inputs.nextcloud-cookbook.outPath;
sha256 = inputs.nextcloud-cookbook.narHash; sha256 = inputs.nextcloud-cookbook.narHash;
license = "agpl3Plus"; license = "agpl3Plus";
unpack = true;
}; };
snappymail = prev.fetchNextcloudApp { snappymail = prev.fetchNextcloudApp {
url = inputs.nextcloud-snappymail.outPath; url = inputs.nextcloud-snappymail.outPath;
sha256 = inputs.nextcloud-snappymail.narHash; sha256 = inputs.nextcloud-snappymail.narHash;
license = "agpl3Plus"; license = "agpl3Plus";
unpack = true;
}; };
}; };
} }

View File

@ -1,15 +0,0 @@
inputs: _final: prev: {
osc = prev.buildGoModule {
pname = "osc";
version = "v0.4.6";
src = inputs.osc;
vendorHash = "sha256-POtQWIjPObsfa3YZ1dLZgedZFUcc4HeTWjU20AucoKc=";
ldflags = [
"-s"
"-w"
];
};
}

View File

@ -1,44 +0,0 @@
# Fix: Volnoti error: 'volnoti' has been removed due to lack of maintenance upstream.
_final: prev: {
volnoti = prev.stdenv.mkDerivation {
pname = "volnoti-unstable";
version = "2013-09-23";
src = prev.fetchFromGitHub {
owner = "davidbrazdil";
repo = "volnoti";
rev = "4af7c8e54ecc499097121909f02ecb42a8a60d24";
sha256 = "155lb7w563dkdkdn4752hl0zjhgnq3j4cvs9z98nb25k1xpmpki7";
};
patches = [
# Fix dbus interface headers. See
# https://github.com/davidbrazdil/volnoti/pull/10
(prev.fetchpatch {
url = "https://github.com/davidbrazdil/volnoti/commit/623ad8ea5c3ac8720d00a2ced4b6163aae38c119.patch";
sha256 = "046zfdjmvhb7jrsgh04vfgi35sgy1zkrhd3bzdby3nvds1wslfam";
})
];
nativeBuildInputs = with prev; [
pkg-config
autoreconfHook
wrapGAppsHook3
];
buildInputs = with prev; [
dbus
gdk-pixbuf
glib
xorg.libX11
gtk2
dbus-glib
librsvg
];
meta = with prev.lib; {
description = "Lightweight volume notification for Linux";
homepage = "https://github.com/davidbrazdil/volnoti";
license = licenses.gpl3;
platforms = platforms.linux;
maintainers = [ ];
# Broken by https://github.com/nix-community/home-manager/pull/5725/commits/98bf8de65dc1ed12c6443b18f6f24d36e9c438d6
mainProgram = "volnoti";
};
};
}

View File

@ -1,21 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBCc2hS
RUw4Y200allVODI0QTYxdXlHSHRiS1pWWHg5SW9tZ0tGVmc2ajJZCitXeEd0dk9K
MmRkZlRYd253RWFzNXpUR0xuTXI2dWVhNFZpQnNlU0VFdEUKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHNScVkwd1RmVGhNcFVSRTlxQzlvSUc2cGxNWUc0YVJ5RjRydk9J
RG1peDQKVU5iN1ZmWEJyOXBiNWdiRFlnNFFKR09vaFB4SWZWK0x3VWJwMDZtYlBj
MAotPiBzc2gtZWQyNTUxOSBuanZYNUEgSXR5OEk5cWZHUEZ3WmFCUTVFeTBnTG5h
cmNxVWFLV2JhUTRBaUJGWERncwpYMFBIN0kySXdjOE5YcS85bXRCRnRsK3NyMHY4
N0JKelFyeHB6T1dEZ2VnCi0+IHNzaC1lZDI1NTE5IENxSU9VQSAyQVJYRXJ1cFVl
dldaa0Qydlc3MzlFYnN5YUx0amdWZm5PcWovRm1MaVg0CkJsSFZRdGJIZzA1T0Ny
bUNnL0Zxa05ubHluSVBUenVCZTZpYlA5UUFEMDQKLT4gc3NoLWVkMjU1MTkgejFP
Y1p3IDFPQU5HZm5mRFl5NnNLVHUvdUlmTEtyS0djNWZaMWg5VDl1ZldNTkVWbXMK
RkVBTzNUa0d6c3NJUHQrazdKWXNZY3NIRzRndGdRNjFjMXZCSEhIQnIyYwotLS0g
VzNOa3dXS0hrMWxNUlJ4UzAxNlkzSXM4RWc1RGFzQjFyb1dGZXFnL3RCVQoq002V
S5MQqBjKKOacO4OWgn5KpmU2D7zJWJjNMxH80L6HFNoyOj4wNa+8TA0Q7MTn3bKN
YvAuwbDAGjjDt8vZFKOiZB0xAex+H7A1MVvuGIA8xQa6iNBMwj7nWTLif5pCbVk+
9aAAprcJVDJx4TeFXlNF6XtcQ3J8abwi6TDqNFpfwwBb/wruyzutgvlOiz1XSBX0
xlCGckq/BCnItLURIb7zhqRMqk/JODPjOKArmP86nCq25Wm+W5JQ8ViQ7LHJyoFj
zbiwabqeBJZgqoVdVMj8Glz+91RVodn6f9VwQcHINgHxmkd6j2z75AmWZecwD2ic
pUMnikqIMI0B3zW5H38t2cJv+aIMTl7lH5Hf1P5jEn3NPw==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,17 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyAvWi9T
NnFzUnlKUGord21NUy9OT1NDRjhIbFB6MUc3TzgwVzY3OHpFSlN3CmhuNFY1L1FB
VFBHY1lNNjFYdFZyeHoxZUZyTFdpVHhqM1JqMUM3YWljVUUKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFI4aGU5Z2NUeGNSNmEzNFk0anBBbUw0NUtHTE55WmgxOUN0T1p1
QUZyR2cKeTNack0vMVVsNTFMbmFSUXdUUkw2MTlnSzhRajVSWXJvZmV2QjlFcUZY
QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgc01kWFdYS3BBay96Uzd5cG1MMlNMNXhQ
NTV4NVpvc2lLZkpLWkhZZlRrVQo0SXJhWUVMVUtYb1hEOEtJUnJoY2t0OUlpQVY2
UUZYdHpBcWRvUU0yRHlvCi0+IHNzaC1lZDI1NTE5IENxSU9VQSB2NTZHWUd2c3o1
c0NKTThaMkgyeG54Nmw1dHZBQkZoYmJkOTZNcnVyMUJVCldzQ1NHNk8vTGRMNHlM
eU0yYmltMkhlUjY2NWxhdHQ2N3BMUjdzTk9PMFkKLT4gc3NoLWVkMjU1MTkgejFP
Y1p3IHh3OEEzTmIrQXhtSTE2REFUV1loVE5vNTRUbEJmNEE4YmhBckRmZGpwVXMK
OEo5RXdwU1JuY3FPQnJNQ1hMdHJxcE4xVnVVWVVLREROYjNsZkN3ZzV2cwotLS0g
aXMrandHZTJzME95VFRuUDRzWDQ5Z3N5RGxVOUUxQ1FGNGpvN3Y4SllSNApAOIi/
0iP9cccbkUqLZJicpIlKAP+QsYM8Bfb/wYyaQPnh4vlKqil4LpQEfFW+/J82DIti
8o/ddK8YDlLg3lwyiZ2dUm3O87jA7KEgd/g=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,18 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBuQTZM
TTg0ai9yNi9Ia3pFNW0vb3JQczZtVEVyNkFNVzBlUVpVd3ZBbndrCklqdS8zeGky
WEN0YW5xck5sSXpXeFZCbHY0NHhDMU5SeGlaYmN4Szc0b1EKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIGJVZTZBdERTNUt6d0sxeGVOcnRtNmdCSlRKWUNjRHByMkZucUlz
Nm5FMTQKbHFtNnM4ZCtzdFNTa214ZVRkaFdmZnFYOCs1Z25YTDVVKzloYUVHVlg1
cwotPiBzc2gtZWQyNTUxOSBuanZYNUEgOXFwSzByaUdidFRWbE5seFNEVDYxRWtq
OXZURnEzVWphM0VoVnJvSURoUQpGbEt4YmcraDZOcXRTQUF1ekw4RTRCN2JRR1NK
QlRQaGRZd1RIMWNiRWpjCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBzTTVsbnVjWUxt
L0hyM21RS2w2a2NIY2xvSmZ0OUdDWGFVcG5IYlNhUFNzClY1bmdNUkRYR2QyYVFW
VHF3enZqUlZqUWlvZlI2aHZrREdwZGUwdzdXUHMKLT4gc3NoLWVkMjU1MTkgejFP
Y1p3IDN4cThQRjdvTWJ2S2FaMjZ0RHlDeElDc1BuU0JDSzlpcFdzT2ZhLzA1QmcK
TjlFMkgzOFhKbkdvUWt2SGhaUUJXdjBxK2hUeE1sSzBsNWJyNG8rUlZRbwotLS0g
SGw4VmpCMktjQ0ZpUExnWUtsOHhHS0tZckoxeTdtZXMyVXpWT09Ea1NUMAoRRzA+
0rbfJ+eVeccDaulmqh+Wv3T1/+SQQJYD5trume3vSzXgRxJYeXR/BespsDzWJ3yg
McHYNvEK76stD3vopKvpDU3Nk861xp++SavJtrIVKon6YJl6a6Ox+GxhrNk0+5f9
xgDWhIHwzHLPvyseYNjRFy8GsYaP2tT9TGMrQHFTAKeuvA==
-----END AGE ENCRYPTED FILE-----