Skip to content

Instantly share code, notes, and snippets.

@luochen1990
luochen1990 / nix-wrap
Last active February 23, 2022 07:12
nix-wrap: shebang to make your Nix file into executable
#!/usr/bin/env bash
#echo '$@ = ' "$@"
nixfile="$1"; shift
#echo "nixfile =" "$nixfile"
outpath="$(nix-build --pure $nixfile)"
#echo "outpath =" "$outpath"
@luochen1990
luochen1990 / puzzle.hs
Created February 14, 2022 10:07
logic puzzle
#!/usr/bin/env nix-shell
#! nix-shell -p "ghc"
#! nix-shell -i "runghc"
-- https://www.zhihu.com/question/23999095/answer/2254625328
import Control.Monad (guard)
brain_states :: (Int, Int) -> [Int]
brain_states (x, y) = [z | z <- [x + y, abs(x - y)], z > 0]
@luochen1990
luochen1990 / shell.nix
Created February 14, 2022 08:49
(示例) 在 NixOS 中构建可用 pip 的 python 隔离环境
#!/usr/bin/env nix-shell
#! nix-shell shell.nix
{ pkgs ? import <nixpkgs> {} }:
(pkgs.buildFHSUserEnv {
name = "devbox";
targetPkgs = pkgs: (with pkgs; [
python38
python38Packages.pip
@luochen1990
luochen1990 / build.nix
Created January 30, 2022 10:24
用 Nix 构建 C 项目的最简配置示例
#!/usr/bin/env nix-build
{ nixpkgs ? (import <nixpkgs> {}) }: with nixpkgs;
stdenv.mkDerivation rec {
pname = "some-c-project";
version = "0.1";
src = ./.;
nativeBuildInputs = [ cmake ]; #replace to your build time dependencies
buildInputs = [ libssl ]; #replace to your runtime dependencies
}
@luochen1990
luochen1990 / im-custom-phrases.py
Last active December 13, 2023 08:47
在输入法(Input Method) 中通过自定义短语输入数学符号, 该脚本用以生成相关配置文件
#!/usr/bin/env python3
phrases = '''
; 希腊字母: 参考 https://en.wikipedia.org/wiki/Greek_alphabet
Alpha,1=Α
alpha,1=α
Nu,9=Ν
nu,9=ν
Beta,1=Β
@luochen1990
luochen1990 / Dockerfile
Last active March 8, 2022 16:26
Docker devbox for NixOS users who want a FHS linux environment
#!/usr/bin/env -S bash -c 'docker build -t devbox --build-arg USER_ID=$(id -u) --build-arg USER_NAME=$(id -un) --build-arg GROUP_ID=$(id -g) --build-arg GROUP_NAME=$(id -gn) $(realpath $(dirname $0))'
FROM ubuntu:20.04
ARG USER_ID
ARG USER_NAME
ARG GROUP_ID
ARG GROUP_NAME
RUN addgroup --gid $GROUP_ID $GROUP_NAME; exit 0
@luochen1990
luochen1990 / haskell_repl.hs
Last active November 27, 2021 15:44
Haskell eval & repl implemented via hint & conduit
#!/usr/bin/env nix-shell
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [conduit conduit-extra bytestring text hint])"
#! nix-shell -i "ghci -ignore-dot-ghci -fdefer-type-errors -XTypeApplications"
{-# language ScopedTypeVariables, TypeApplications, PartialTypeSignatures #-}
{-# language OverloadedStrings #-}
import Conduit
import Data.Conduit
import Data.ByteString (ByteString)
@luochen1990
luochen1990 / test_script.sh
Created November 12, 2021 07:03
带多个daemon进程的测试脚本的写作模板
#!/usr/bin/env bash
#So that directories are relative to current file path instead of cwd
#Ref: https://stackoverflow.com/questions/242538/unix-shell-script-find-out-which-directory-the-script-file-resides
cd $(dirname $0)
cd ./server
#Start multiple daemon processes and kill them all in one shot
#Ref: https://stackoverflow.com/questions/3004811/how-do-you-run-multiple-programs-in-parallel-from-a-bash-script
(trap 'kill 0' SIGINT EXIT;
@luochen1990
luochen1990 / relpath_example.py
Created November 11, 2021 01:48
Path relative to current file
#!/usr/bin/env python3
import sys
import os
relpath = lambda p: os.path.normpath(os.path.join(os.path.dirname(__file__), p))
sys.path.append(relpath('..')) # so that you can import from upper dir
path1 = relpath('../src/main.py')
print(f'path1 relative to cwd: {path1}')
print(f'path1 absolute path: ({ os.path.abspath(path1) })')
@luochen1990
luochen1990 / ast-pattern-via-free-monad.hs
Created November 5, 2020 05:39
a demo about Expressing an AST pattern via Free Monad
{-# language TemplateHaskell #-}
{-# language TypeFamilies #-}
{-# language StandaloneDeriving, DeriveFunctor, DeriveFoldable, DeriveTraversable, DeriveGeneric, DeriveDataTypeable, DeriveAnyClass, FlexibleContexts #-}
import Control.Monad.Free
import Data.Functor.Foldable
import Data.Functor.Foldable.TH
import Data.Functor.Classes
import Text.Show.Deriving
import Data.Foldable